Как получить MIME-тип изображения с файлом_get_contents в PHP

Мне нужно получить MIME-тип изображения, но у меня есть только тело изображения, которое у меня есть с file_get_contents. Есть ли возможность получить тип MIME?

Ответ 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";
}