如何在PHP中获取包含文件内容的图像的MIME类型

如何在PHP中获取包含文件内容的图像的MIME类型,php,http,mime-types,file-get-contents,content-type,Php,Http,Mime Types,File Get Contents,Content Type,我需要获得图像的MIME类型,但我只有图像的主体,我已经用file\u get\u contents获得了它。有可能得到MIME类型吗?是的,你可以这样得到它 $file_info = new finfo(FILEINFO_MIME_TYPE); $mime_type = $file_info->buffer(file_get_contents($image_url)); echo $mime_type; 通过只检查Mime类型,要非常小心!如果您真的想确定一个图像实际上是一个图像,最安

我需要获得图像的MIME类型,但我只有图像的主体,我已经用
file\u get\u 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


要更直接地回答您的问题,请使用。

如果您使用HTTP下载文件,请不要猜测(也称为自动检测)MIME类型。即使您使用
file\u get\u contents
下载了该文件,您仍然可以访问HTTP头

用于检索上次
文件\u get\u内容
调用(或使用的任何调用)的标题


可能重复使用$file->buffer时要小心,因为它会占用大量内存。对于18MB的文件,PHP的峰值为220MB(在调用->缓冲区之前是50MB)!我必须先把文件内容放进去,然后默剧内容,真是太棒了,马丁!
$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";
}