我的程序使用PHP将各种大小的图像上传到MySQL数据库的blob字段中。我能够成功上传不同大小,高达1MB及以上。我的问题是,当我显示它们时,我能够显示小于10KB的图像。对于较大的图像,显示错误 .....无法显示,因为它包含错误 (在Firefox中),而在Chrome中,它只显示图像占位符。我尝试了很多技巧,我到处搜索过。我编辑了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与我预计的平均图像大小相差甚远,以后会上传。请帮忙。
答案 0 :(得分:0)
如果$d_resource
是二进制图像数据
你应该使用imagejpeg或imagegif或其他系列函数,而不是echo
答案 1 :(得分:0)
将类型从BLOB
(或甚至TEXT
或VARCHAR
?)更改为MEDIUMBLOB
或LONGBLOB
,请参阅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,但实际大小较小,因为您base64_encode
图像(如果您使用存储二进制数据的BLOB,则不需要这样做。)
另请注意John对您的问题的评论:如果您没有$d_id
,则应向magic_quotes_gpc
添加斜杠。
答案 2 :(得分:0)
您可能正在达到内存限制,因为您携带的是图像的多个副本。 $ row [fdoc]中有一个,$ d_resources中有一个。而你应该删除striplashes调用,它不会对你有所帮助。