我需要获取图像的MIME类型,但我只有file_get_contents
所拥有的图像的主体。是否有可能获得MIME类型?
是的,你可以这样得到它。
$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://
wrapper进行的任何调用)。
$contents = file_get_contents("https://www.example.com/image.jpg");
$pattern = "/^content-type\s*:\s*(.*)$/i";
if (($header = preg_grep($pattern, $http_response_header)) &&
(preg_match($pattern, array_shift(array_values($header)), $match) !== false))
{
$content_type = $match[1];
echo "Content-Type is '$content_type'\n";
}