我正在尝试使用PHP脚本显示图像。基本上,php脚本在图像的完整路径上传递,然后在浏览器中显示该图像。我已经检查过以确保图像存在,正确读取等,但是在浏览器中我只是看到破损的图像框(例如IE中的小红叉),如果我去那里。
我的脚本会发出这些标题:
<?php
header('Last-Modified: ' . gmdate('D, d M Y H:i:s T', filemtime($file)));
header('Content-Type: '.$mime);
header('Content-Length: '.filesize($file)."\n\n");
header('Etag: '.md5($file));
echo $file;
die;
$file
包含类似'/var/www/htdocs/images/file.jpg'
的内容。 $mime
为'image/jpeg'
。
我也试过回复file_get_contents($file)
,但它也没有用。
问题是什么,有什么想法吗?
答案 0 :(得分:4)
<?php
$filename = basename($file);
$file_extension = strtolower(substr(strrchr($filename,"."),1));
switch( $file_extension )
{
case "gif":
$ctype="image/gif";
break;
case "png":
$ctype="image/png";
break;
case "jpeg":
case "jpg":
$ctype="image/jpeg";
break;
default:
}
ob_clean(); // add this before header
header('Content-type: ' . $ctype);
readFile($file);
?>
有些时候可能会在任何其他文件中产生额外的空间。因此,在调用header()之前调用ob_clean()可以删除这些额外的空格。
答案 1 :(得分:2)
努力简化......
<?php
header('Content-type:' . mime_content_type($file));
readfile($file);
应按预期运作。
答案 2 :(得分:2)
我找到了答案,我在?>
标记之后有一些额外的空格,导致标题无效。 grrrrrrr