Мне нужно получить MIME-тип изображения, но у меня есть только тело изображения, которое у меня есть с file_get_contents
. Есть ли возможность получить тип MIME?
Как получить MIME-тип изображения с файлом_get_contents в PHP
Ответ 1
Да, вы можете получить это так.
$file_info = new finfo(FILEINFO_MIME_TYPE);
$mime_type = $file_info->buffer(file_get_contents($image_url));
echo $mime_type;
Ответ 2
Будьте очень осторожны, проверяя только Mime Type! Если вы действительно хотите быть уверены, что изображение на самом деле является изображением, самый безопасный способ сделать это - открыть его с помощью библиотеки манипуляций с изображениями и записать его вместе с библиотекой. Это не удастся, если образ на самом деле представляет собой вредоносный код, и гарантирует, что вы действительно записываете файл образа на диск. Например, вы можете легко обмануть MIME, думая, что какой-то вредоносный код - это GIF.
Чтобы ответить на ваши вопросы более прямо, используйте модуль FileInfo PECL.
Ответ 3
Если вы загружаете файл по протоколу 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";
}