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