2013-05-19 62 views
3

我的程序使用PHP將各種大小的圖像上傳到MySQL數據庫的blob字段。我能夠成功上傳不超過1MB及以上的不同尺寸。我的問題是,當我顯示它們時,我能夠顯示小於10KB的圖像。對於較大的圖像,顯​​示錯誤.....無法顯示,因爲它包含錯誤(在Firefox中),而在Chrome中,它只顯示圖像佔位符。我嘗試了很多技巧,而且我到處都是Google搜索。我編輯了php.ini和my.ini。我的程序是一個Intranet應用程序,一次只有不到50個用戶。這是用於顯示圖像的腳本:爲什麼有些圖像不能渲染

如果我刪除標頭('Content-Type:'。$ resource_type),它會將二進制代碼轉儲到屏幕上。我已經將MySQL數據包大小增加到100MB,問題依然存在。

$d_id= $_GET['k'];$query="";$query_handle=0;$row="";$no_of_rows=0; 
    $query="SELECT * FROM tdoc "; 
    $query.=" WHERE ucase(trim(fsha_doc_key))='".strtoupper(trim($d_id))."' "; 
    $query_handle=mysql_query($query,$conn_handle); 
    if(!$query_handle) {$error_flag=1;echo '<br />Unable to execute query to Extract Resource CODE:FREF';} 
    if($query_handle) $no_of_rows=mysql_num_rows($query_handle); 
    if(($query_handle)&&($no_of_rows<=0)) {$error_flag=1;echo '<br />The Exact Resource: '.strip_tags($d_id).' NOT found ';} 
    if(($query_handle)&&($no_of_rows>0)){ 
     $row=mysql_fetch_assoc($query_handle); 
     $resource_type=trim($row['ftype']); 
     $resource_size=$row['fsize']; 
     $resource_h=$row['fheight']; 
     $resource_w=$row['fwidth']; 
     $d_resource=$row['fdoc']; 
     header('Content-Type: '.$resource_type); 
     header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
     header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 
     header('Cache-Control: no-store, no-cache, must-revalidate'); 
     header('Cache-Control: post-check=0, pre-check=0', false); 
     header('Pragma: no-cache'); 
     header('Content-Length: '.filesize($d_resource)); 
     header('Content-height: '.$resource_h); 
     header('Content-width: '.$resource_w); 
     echo stripslashes(base64_decode($d_resource)); 
    } 

我已經讀到這裏關於這個錯誤完全的帖子,但沒有解決我的具體問題,因爲我的是顯示小尺寸的圖像,但不是圖像達到和超過10KB。 10kb與我稍後上傳的預計平均圖像大小相差甚遠。請幫忙。

+1

這看起來像你可能會打開自己的SQL注入? – John

+0

只是一個建議,你不應該將整個文件保存在你的數據庫中,你應該將它保存在你的服務器上的一個目錄中,然後引用msql文件中的鏈接... –

回答

0

變化從BLOB(甚至TEXTVARCHAR類型? )至MEDIUMBLOBLONGBLOB,見storage requirements

TINYBLOB, TINYTEXT L + 1 bytes, where L < 2^8 
BLOB, TEXT L + 2 bytes, where L < 2^16 
MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, where L < 2^24 
LONGBLOB, LONGTEXT L + 4 bytes, where L < 2^32 

BLOB的大小爲2^16,但實際大小因爲您的圖像(如果您使用存儲二進制數據的BLOB不是必須的),所以尺寸較小。

另請注意John對你的問題的評論:如果你沒有magic_quotes_gpc,你應該在$d_id上加上斜槓。

0

由於攜帶圖像的多個副本,您可能會遇到內存限制。一個在$ row [fdoc]中,一個在$ d_resources中。你可能應該刪除這些反斜線呼叫,它不會對你有任何幫助。