使用PHP显示图像不起作用

时间:2009-02-17 05:32:07

标签: php image image-processing gd gd2

我正在尝试使用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),但它也没有用。

问题是什么,有什么想法吗?

3 个答案:

答案 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