Если файл загружен на сервер, есть ли способ использования PHP, чтобы убедиться, что это на самом деле изображение, а не только файл с расширением .jpg или .gif?
Использование (часть) библиотеки GD.
PHP: GD – Руководство
array getimagesize ( string $filename [, array &$imageinfo ] )
Первый элемент массива будет 0, если нет изображения. PHP: getimagesize
Если у вас нет установленного GD (большую часть времени вы будете), вы можете прочитать заголовок файла, как упоминал Шейн .
EDIT: На самом деле, как отметил Нил в комментариях, библиотеке GD даже не требуется использовать эту функцию. Так что используйте его.
лучший способ проверить, является ли файл образным
function is_image($path) { $a = getimagesize($path); $image_type = $a[2]; if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP))) { return true; } return false; }
подробнее: http://www.binarytides.com/php-check-if-file-is-an-image/
Наиболее эффективным способом было бы посмотреть начальные байты файла и проверить спецификатор файла «magic number». Вот список магических чисел .
Для записи: теперь в 2013 году мы можем:
Для макс. совместимость (если у вас нет библиотеки GD).
Используйте всегда доступный тип mime-content-type ((PHP 4> = 4.3.0, PHP 5))
$type = mime_content_type($filename); if (strstr($type, 'image/')) { echo 'is image'; }