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

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

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

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

Родной способ получить 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; } 

Метод 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) 

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

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