我遇到了错误
"图片“.... image.php?id = 1878”无法显示,因为它包含错误。
这是我从db中检索图像内容的代码。 db中的数据是正确的,因为相同的文件与一些旧的PHP代码完美地显示。事实上,我使用的代码是完全相同的旧代码,我只是从许多链接(包含)的php文件中提取它,显然我错过了一些东西。
$query="SELECT image_original_file, mime_type, {$field_content} as content, {$field_content}_md5 as imhash, CHAR_LENGTH({$field_content}) as leng FROM IMAGES WHERE ID_image={$_GET['id']}";
$res=mysql_query($query,DB_CON);
$myRow = mysql_fetch_row($res);
//Of course this echo statement is just for debuging, as echo causes the default headers to be sent.
echo "Fetched content length:".mb_strlen($myRow[2])." and MySQL length ".$myRow[4];
list($name,$type,$content,$imhash,$length)=$myRow;
这里的输出显示php中的内容长度是29179bytes,但在MySQL中它是28605(这是我保存图像时的正确大小)。 我想知道为什么在这些代码行之后PHP的内容大小不同。 DB中的filecontent不是base64编码的,原始代码也不对从db中检索的内容使用任何操作。我比较了旧代码的标题和" new"代码,除内容长度以外的所有内容都是相同的。我怀疑这是某种角色问题?
我试过了:
mysql_set_charset('utf8',$con);
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", DB_CON);
mysql_query("SET NAMES utf8",DB_CON);
但问题仍然存在。我会很乐意提供一些建议。
将图像发送到浏览器,如下所示:
header("ETag: \"{$imhash}\"");
header("Expires: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: must-revalidate");
header("Accept-Ranges: bytes");
header("Content-Length: ".mb_strlen($content));
header("Content-Type: {$type}");
header("Content-Disposition: inline; filename=\"{$name}\";");
echo $content;
答案 0 :(得分:1)
您的图片数据正在转义,例如引号字符"
正在变为\"
,这会破坏图片。
确保php.ini配置文件中的magic_quotes_gpc
,magic_quotes_runtime
和magic_quotes_sybase
不是On
。