PHP,用头显示图像()

问题描述:

我我的网站根目录外显示来自图像,像这样:PHP,用头显示图像()

header('Content-type:image/png'); 
readfile($fullpath); 

的内容类型:图像/ PNG是什么让我困惑。

其他人帮我用这段代码,但我注意到并非所有的图片都是PNG。许多是JPG或GIF。
而且它们仍然显示成功。

有谁知道为什么?

最好的解决办法是在文件中读取,然后决定它是一种形象并发出相应的头

$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: 
} 

header('Content-type: ' . $ctype); 

(注:正确的内容类型为JPG文件是image/jpeg

+0

我欣赏抓住扩展的示例代码。具体确定是最佳实践。 – coffeemonitor 2010-04-14 05:38:18

+0

不客气! – paullb 2013-08-09 09:40:42

+3

$ ctype应该从getimagesize() – Tobia 2013-11-06 16:19:08

浏览器通常可以通过嗅探图像的元信息来判断图像类型。此外,该标题中应该有空格:

header('Content-type: image/png'); 

浏览器会根据所收到的数据做出最佳猜测。这适用于标记(哪些网站经常出错)和其他媒体内容。接收文件的程序通常可以找出它收到的内容,而不管它被告知的MIME内容类型。

但这不是你应该依赖的东西。建议您始终使用正确的MIME内容。

有一个更好的为什么确定图像的类型。与exif_imagetype

如果您使用此功能,您可以告诉图像的真实扩展名。

这个函数filename的扩展名是完全不相关的,这很好。

function set-header-content-type($file) 
{ 
    //Number to Content Type 
    $ntct = Array("1" => "image/gif", 
        "2" => "image/jpeg", #Thanks to "Swiss Mister" for noting that 'jpg' mime-type is jpeg. 
        "3" => "image/png", 
        "6" => "image/bmp", 
        "17" => "image/ico"); 

    header('Content-type: ' . $ntct[exif_imagetype($file)]); 
} 

您可以从the link添加更多的类型。

希望它有帮助。

,如果你知道文件的名称,但不知道该文件扩展您可以使用此功能:

public function showImage($name) 
    { 

     $types = [ 
      'gif'=> 'image/gif', 
      'png'=> 'image/png', 
      'jpeg'=> 'image/jpeg', 
      'jpg'=> 'image/jpeg', 
     ]; 
     $root_path = '/var/www/my_app'; //use your framework to get this properly .. 
     foreach($types as $type=>$meta){ 
      if(file_exists($root_path .'/uploads/'.$name .'.'. $type)){ 
       header('Content-type: ' . $meta); 
       readfile($root_path .'/uploads/'.$name .'.'. $type); 
       return; 
      } 
     } 
    } 

注:正确的内容类型为JPG文件是image/jpeg

虽然奇怪的命名,您可以使用getimagesize()函数。这也将给你的MIME信息:

Array 
(
    [0] => 295 // width 
    [1] => 295 // height 
    [2] => 3 // http://php.net/manual/en/image.constants.php 
    [3] => width="295" height="295" // width and height as attr's 
    [bits] => 8 
    [mime] => image/png 
)