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
 }
Другие вопросы по тегам