使用错误文件的 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
}
我正在编写一个脚本来调整和裁剪上传的图像。
所有有效文件都可以... 但是我的一些访问者试图上传无效的。例如文件扩展名是 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
}