PHP,使用 Header() 显示图像
我正在显示来自Web根目录外部的图像,如下所示:
header('Content-type:image/png');
readfile($fullpath);
内容类型:图像/ png让我感到困惑。
其他人帮我编写了这段代码,但我注意到并非所有图像都是PNG。许多是jpg或gif。
它们仍然成功显示。
有谁知道为什么吗?
我正在显示来自Web根目录外部的图像,如下所示:
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;
case "svg": $ctype="image/svg+xml"; break;
default:
}
header('Content-type: ' . $ctype);
(注意:JPG 文件的正确内容类型是 image/jpeg
)
有一个更好的原因来确定图像的类型。与exif_imagetype
如果使用这个功能,可以分辨出图像的真实延伸。
使用这个函数,文件名的扩展名是完全无关紧要的,这很好。
function setHeaderContentType(string $filePath): void
{
$numberToContentTypeMap = [
'1' => 'image/gif',
'2' => 'image/jpeg',
'3' => 'image/png',
'6' => 'image/bmp',
'17' => 'image/ico'
];
$contentType = $numberToContentTypeMap[exif_imagetype($filePath)] ?? null;
if ($contentType === null) {
throw new Exception('Unable to determine content type of file.');
}
header("Content-type: $contentType");
}
您可以从链接中添加更多类型。
希望它有帮助。