PHP проверяет, является ли файл образным
Есть ли способ убедиться, что полученный файл является изображением в PHP
?
Тестирование расширения не очень безопасно для меня, поскольку вы можете загрузить script
и изменить его расширение на все, что хотите.
Я тоже пытался использовать getimagesize
, но может быть что-то более подходящее для этой конкретной проблемы.
Ответы
Ответ 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
, чтобы найти файл - это изображение или нет.