PHP,用Header()显示图像

cof*_*tor 38 php header

我正在显示来自我的网络根目录的图像,如下所示:

header('Content-type:image/png');
readfile($fullpath);
Run Code Online (Sandbox Code Playgroud)

内容类型:image/png令我感到困惑.

其他人帮我解决了这个问题,但我注意到并非所有图像都是PNG.很多都是jpg或gif.
它们仍然成功显示.

有谁知道为什么?

pau*_*llb 59

最好的解决方案是读入文件,然后决定它是哪种图像并发送适当的标题

$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;
    case "svg": $ctype="image/svg+xml"; break;
    default:
}

header('Content-type: ' . $ctype);
Run Code Online (Sandbox Code Playgroud)

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

  • $ ctype应该从getimagesize()中读取 (3认同)
  • 您可以简单地使用pathinfo($ filename,PATHINFO_EXTENSION),而不是使用substr和strrchr.它更容易阅读. (3认同)

ali*_*dil 14

有一个更好的原因来确定图像的类型.使用exif_imagetype

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

使用此函数文件名的扩展名完全无关紧要,这很好.

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)]);
}
Run Code Online (Sandbox Code Playgroud)

您可以从链接添加更多类型.

希望能帮助到你.