如何在PHP中使用file_get_contents获取图像的mime类型


How to get MIME-type of an image with file_get_contents in PHP

我需要获得图像的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;

如果使用HTTP下载文件,不要猜测(也就是自动检测)MIME类型。即使您使用file_get_contents下载了文件,您仍然可以访问HTTP头文件。

使用$http_response_header来检索最后一次file_get_contents调用的头(或任何使用http[s]://包装的调用)。

$contents = file_get_contents("https://www.example.com/image.jpg");
$headers = implode("'n", $http_response_header);
if (preg_match_all("/^content-type's*:'s*(.*)$/mi", $headers, $matches)) {
    $content_type = end($matches[1]);
    echo "Content-Type is '$content_type''n";
}

仅在服务器无法提供Content-Type(或仅提供通用的全部捕获类型,如application/octet-stream)时才诉诸自动检测。

要非常小心,不要只检查Mime类型!如果您确实想要确保图像确实是图像,那么最安全的方法是使用图像处理库打开它并使用该库编写它。如果映像实际上是恶意代码,并且保证您实际上正在向磁盘写入映像文件,则此操作将失败。作为一个例子,您可以很容易地欺骗MIME,使其认为某些恶意代码是GIF。

要更直接地回答您的问题,请使用FileInfo PECL模块