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