Каков наилучший и быстрый способ проверки правильности изображения на PHP? Мне нужно, чтобы он мог проверять GIF, JPG, а также изображения PNG.
exif_imagetype – лучшее решение.
Этот метод работает быстрее, чем использование getimagesize. Процитировать php.net «Возвращаемое значение – это то же значение, которое getimagesize () возвращает в индексе 2, но exif_imagetype () выполняется намного быстрее».
if(exif_imagetype('path/to/image.jpg')) { // your image is valid }
Я думаю, getimagesize
:
list($width, $height, $type, $attr) = getimagesize("path/to/image.jpg"); if (isset($type) && in_array($type, array( IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF))) { ... }
exif_imagetype намного быстрее, чем getimagesize, и не использует gd-Lib (оставляя более компактную память)
function isImage($pathToFile) { if( false === exif_imagetype($pathToFile) ) return FALSE; return TRUE; }
Как рекомендовано в документации PHP :
«Не используйте getimagesize (), чтобы проверить, что данный файл является допустимым изображением. Используйте вместо него специально построенное решение, такое как расширение Fileinfo».
Вот пример:
$finfo = finfo_open(FILEINFO_MIME_TYPE); $type = finfo_file($finfo, "test.jpg"); if (isset($type) && in_array($type, array("image/png", "image/jpeg", "image/gif"))) { echo 'This is an image file'; } else { echo 'Not an image :('; }
Я использую эту функцию … он также проверяет URL-адреса
function isImage($url){ $params = array('http' => array( 'method' => 'HEAD' )); $ctx = stream_context_create($params); $fp = @fopen($url, 'rb', false, $ctx); if (!$fp) return false; // Problem with url $meta = stream_get_meta_data($fp); if ($meta === false){ fclose($fp); return false; // Problem reading data from url } }
Я использую это:
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; }