我听说处理上传图片的最佳方法是使用GD
库“重新处理”它们并保存处理过的图像。见:PHP image upload security check list
我的问题是GD
中如何“重新处理”?这究竟意味着什么?我不太了解GD库,我担心我会搞砸......
所以如果之前有人这么做过你能给我一个例子吗?
(我知道,另一个选择是使用ImageMagick。对于ImageMagick,我在这里找到了答案:Remove EXIF data from JPG using PHP,但我现在不能使用ImgMagick。顺便说一下..删除EXIF数据意味着完全重新创建在这种情况下的图像?)
(如果有人有兴趣,我正在使用Zend Framework。)
答案 0 :(得分:4)
如果用户上传了JPEG文件,您可以执行以下操作来重新处理它:
$newIm = @imagecreatefromjpeg($_FILES['file']['tmp_name']);
if (!$newIm) {
// gd could not create an image from the source
// most likely, the file was not a valid jpeg image
}
然后,您可以使用imagedestroy()丢弃$newIm
图像,并使用用户上传的文件,或者保存GD中的图像并使用它。保存GD图像可能存在一些问题,因为它不是原始图像。
另一个简单的方法是检查图像文件的标题(前几个字节)以确保它是正确的;例如,所有JPEG文件都以0xff 0xd8
开头。
另请参阅imagecreatefromstring(),您还可以使用getimagesize()对上传的图片执行类似的检查。
答案 1 :(得分:2)
function isvalidjpeg($file)
{
$finfo = finfo_open(FILEINFO_MIME_TYPE);
return is_resource($finfo) &&
(finfo_file($finfo, $file) === 'image/jpeg') &&
finfo_close($finfo);
}
if(isvalidjpeg($_FILES['file']['tmp_name'])) {
$newIm = @imagecreatefromjpeg($_FILES['file']['tmp_name']); .....