Каков наилучший и быстрый способ проверки правильности изображения на PHP? Мне нужно, чтобы он мог проверять GIF, JPG, а также изображения PNG.
Каков наилучший и быстрый способ проверки правильности изображения на PHP?
Ответ 1
exif_imagetype - лучшее решение.
Этот метод быстрее, чем использование getimagesize. Процитировать php.net "Возвращаемое значение - это то же самое значение, которое getimagesize() возвращает в индексе 2, но exif_imagetype() выполняется намного быстрее."
if(exif_imagetype('path/to/image.jpg')) {
// your image is valid
}
Ответ 2
Я думаю getimagesize
:
list($width, $height, $type, $attr) = getimagesize("path/to/image.jpg");
if (isset($type) && in_array($type, array(
IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF))) {
...
}
Ответ 3
Как рекомендовано документации 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 :(';
}
Ответ 4
exif_imagetype намного быстрее, чем getimagesize и не использует gd-Lib (оставляя более компактную память)
function isImage($pathToFile)
{
if( false === exif_imagetype($pathToFile) )
return FALSE;
return TRUE;
}
Ответ 5
Я использую эту функцию... он также проверяет 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
}
}
Ответ 6
Я использую это:
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;
}