Я пишу скрипт, который изменяет размеры и обрезает загруженные изображения.
все действительные файлы в порядке …
но некоторые из моих посетителей пытаются загрузить недействительные .. например, расширение файла JPG, но на самом деле это размолвка файл .. выглядит расширение загружаемого файла 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;
}
Лучше всего, вероятно, будет изменить код, который устанавливает $ 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
}
Других решений пока нет …