Есть ли способ убедиться, что полученный файл является образом в 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
чтобы найти файл – это изображение или нет.