Каков наилучший и быстрый способ проверки правильности изображения на PHP?

Каков наилучший и быстрый способ проверки правильности изображения на PHP? Мне нужно, чтобы он мог проверять GIF, JPG, а также изображения PNG.

Solutions Collecting From Web of "Каков наилучший и быстрый способ проверки правильности изображения на PHP?"

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; }