Imagecreatefromjpeg с ошибочным файлом
Я пишу скрипт, который изменяет размеры и обрезает загруженные изображения.
все допустимые файлы в порядке... но некоторые из моих посетителей пытаются загрузить недействительные файлы... например, расширение файла jpg, но на самом деле это файл формата tiff.. расширение загружаемого файла выглядит как gif, но в его EXIF детали пишет "это JPG".. и т. д.
Как вы можете себе представить, функции imagecreatefromXX() в этом случае выдают ошибку (это не правильный jpg и т. Д.).
у вас есть идеи, как я могу решить эту проблему?
как я должен изменить свои последние коды?
switch($type) {
case 'gif':
$img = imagecreatefromgif($source);
break;
case 'jpg':
case 'JPEG':
case 'jpeg':
$img = imagecreatefromjpeg($source);
break;
case 'png':
$img = imagecreatefrompng($source);
break;
}
1 ответ
Лучше всего, вероятно, было бы изменить код, который устанавливает $ type, а не код, которым вы поделились (хотя предложение Джона Конде иметь регистр по умолчанию является хорошим), и использовать что-то вроде exif_imagetype (что, как предполагает ваш вопрос, может уже в игре), чтобы определить тип, а не доверять расширению (которое вы, возможно, даже захотите изменить на соответствующий тип при записи файла): расширение представляет собой данные, предоставленные пользователем, и, как таковое, наименее вероятно, будет точный и / или полезный.
например
$type = exif_imagetype($source);
switch ($type){
case IMAGETYPE_GIF:
$img = imagecreatefromgif($source);
break;
case IMAGETYPE_JPG:
$img = imagecreatefromjpeg($source);
break;
case IMAGETYPE_PNG:
... etc ...
default:
//Fail Gracefully
}