【发布时间】:2014-10-03 22:00:18
【问题描述】:
我需要获取图像的 MIME 类型,但我只有通过 file_get_contents 获得的图像主体。是否有可能获得 MIME 类型?
【问题讨论】:
标签: php http mime-types file-get-contents content-type
我需要获取图像的 MIME 类型,但我只有通过 file_get_contents 获得的图像主体。是否有可能获得 MIME 类型?
【问题讨论】:
标签: php http mime-types file-get-contents content-type
是的,你可以这样得到它。
$file_info = new finfo(FILEINFO_MIME_TYPE);
$mime_type = $file_info->buffer(file_get_contents($image_url));
echo $mime_type;
【讨论】:
要非常小心,只检查 Mime 类型!如果您真的想确定图像实际上是图像,最安全的方法是使用图像处理库打开它并使用该库编写它。如果图像实际上是恶意代码,这将失败并保证您实际上正在将图像文件写入磁盘。举个例子,你可以很容易地欺骗 MIME 认为某些恶意代码是 GIF。
要更直接地回答您的问题,请使用FileInfo PECL module。
【讨论】:
如果您使用 HTTP 下载文件,请不要猜测(也称为自动检测)MIME 类型。即使您使用file_get_contents 下载了文件,您仍然可以访问 HTTP 标头。
使用$http_response_header 检索最后一次file_get_contents 调用(或任何使用http[s]:// wrapper 的调用)的标头。
$contents = file_get_contents("https://www.example.com/image.jpg");
$pattern = "/^content-type\s*:\s*(.*)$/i";
if (($header = array_values(preg_grep($pattern, $http_response_header))) &&
(preg_match($pattern, $header[0], $match) !== false))
{
$content_type = $match[1];
echo "Content-Type is '$content_type'\n";
}
【讨论】: