使用错误文件的 Imagecreatefromjpeg

Imagecreatefromjpeg With Faulty File

我正在编写一个脚本来调整和裁剪上传的图像。

所有有效文件都可以... 但是我的一些访问者试图上传无效的。例如文件扩展名是 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;  
}

您最好的选择可能是修改设置 $type 的代码,而不是您共享的代码(尽管 John Conde 建议使用默认大小写是一个很好的建议),并使用类似 exif_imagetype (您的问题表明可能已经在使用)来确定类型,而不是信任扩展名(您甚至可能希望在编写文件时将其更改为适当的类型):扩展名是用户提供的数据,因此,最不可能准确 and/or 有用。

例如

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