Подтвердить что ты не робот

PHP проверяет, является ли файл образным

Есть ли способ убедиться, что полученный файл является изображением в PHP?

Тестирование расширения не очень безопасно для меня, поскольку вы можете загрузить script и изменить его расширение на все, что хотите.

Я тоже пытался использовать getimagesize, но может быть что-то более подходящее для этой конкретной проблемы.

4b9b3361

Ответ 1

Родной способ получения типа mimetype:

Для PHP < 5.3 используйте mime_content_type()
Для PHP > 5.3 используйте finfo_fopen()

Альтернативы для получения MimeType: exif_imagetype и getimagesize, но они полагаются на наличие соответствующих библиотек. Кроме того, они, скорее всего, просто вернут mimetypes изображения, а не весь список, указанный в magic.mime.

Пока mime_content_type удаляется из PHP5.3, он отлично работает под этой версией. E_STRICT даже не будет уведомлять о том, что он устарел. Если вы не хотите беспокоиться о том, что доступно в вашей системе, просто оберните все четыре функции в прокси-метод, который делегирует вызов функции тому, что доступно, например.

function getMimeType($filename)
{
    $mimetype = false;
    if(function_exists('finfo_fopen')) {
        // open with FileInfo
    } elseif(function_exists('getimagesize')) {
        // open with GD
    } elseif(function_exists('exif_imagetype')) {
       // open with EXIF
    } elseif(function_exists('mime_content_type')) {
       $mimetype = mime_content_type($filename);
    }
    return $mimetype;
}

Ответ 2

getimagesize() должен быть самым определенным способом разработки, является ли файл изображением:

if(@is_array(getimagesize($mediapath))){
    $image = true;
} else {
    $image = false;
}

потому что это образец getimagesize():

Array (
[0] => 800
[1] => 450
[2] => 2
[3] => width="800" height="450"
[bits] => 8
[channels] => 3
[mime] => image/jpeg)

Ответ 3

Использование расширения файла и getimagesize для определения того, имеет ли загруженный файл правильный формат, просто проверка начального уровня, и его можно просто обойти, загрузив файл с истинным расширением и некоторым байтом заголовка изображения, но неправильным контентом.

для обеспечения безопасности и безопасности вы можете сделать миниатюру/размер (даже с исходными размерами изображения) загруженного изображения и сохранить эту версию вместо загруженной. Также возможно получить загруженное содержимое файла и искать его для специального символа, такого как <?php, чтобы найти файл - это изображение или нет.