可怕的警告:“imagecreatefromjpeg():'/tmp/filename'不是有效的JPEG文件,位于/phpfile.php的第xxx行”。

7

有些人上传照片到我们的网站时,会出现以下警告:

警告:imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg:JPEG库报告不可恢复的错误: 在/home/pathremoved/includes/snapsutils.php 的第220行

警告:imagecreatefromjpeg() [function.imagecreatefromjpeg]: '/tmp/phpiw4MFk'不是有效的JPEG文件, 在/home/pathremoved.php的220行

警告:imagesx():提供的参数 不是有效的图像资源,在 /home/pathremoved.php的222行

警告:imagesy():提供的参数 不是有效的图像资源,在 /home/pathremoved.php的223行

警告:imagecreatetruecolor() [function.imagecreatetruecolor]: 图像尺寸无效,在/home/pathremoved.php 的240行

警告:imagecopyresampled(): 提供的参数不是有效的图像资源, 在/home/pathremoved.php的242行

这只会影响某些图片,而在任何程序中打开这些图片时都没有问题,甚至在本地主机上上传也没有问题...我查了一些资料,但没有找到什么结论...

请注意,PHP的upload_max_size为5M,post_max_size为5M。这不是上传或内存问题。我已经测试过4M的图片,没有问题。

任何帮助都会很感激。


1
那是一张很大的图片!!!可能是原因吗? - Liam Bailey
不,我已经上传了5MB的图片,没有任何问题。 - Sherif Buzz
图像中唯一有点突出的是它是渐进式JPEG,但GD不应该有问题。它不是CMYK图像或什么都不是。重新保存后是否有效? - Pekka
4个回答

18

在Google上进行了一些搜索后,我找到了这个错误报告。看起来,GD库对于有缺陷的JPEG文件的容错能力比其他程序要低。建议的解决方案是在处理图像之前将GD设置为忽略JPEG错误,如下所示:

ini_set("gd.jpeg_ignore_warning", 1);

希望那对你有用。你可能会遇到另一个潜在的内存问题。似乎一旦打开图像,GD将所有图像保存在内存中作为位图。这意味着5MB的图像实际上可能会消耗比单个PHP线程允许的更多内存,导致致命错误。我在某些图像上传中遇到了这个问题,不得不减少最大文件大小以解决这个问题。

祝你好运,希望能帮到你。


谢谢你的提示,我已经加上了,但不幸的是没有解决这个问题。 - Sherif Buzz
很抱歉,那个方法不起作用。我在PHP手册的imagecreatefromjpeg页面上找到了这样的内容:“我发现: imagecreatefromJPEG 用于 .JPEG 和 .JPG 结尾 & imagecreatefromjpeg 用于 .jpeg 和 .jpg 结尾。该函数区分大小写。”可能是这个原因吗?我没有尝试过,所以不能确定是否是这个问题。另外,如果您的Web服务器安装了ImageMagick和Imagick扩展,也许您可以尝试一下,看看是否有相同的错误... - Jeremy
1
手册中还有这样的评论:“如果出现以下错误:“ 警告:imagecreatefromjpeg():gd-jpeg:JPEG库报告无法恢复的错误”,请检查JPEG文件。 如果它们是以CMYK格式保存的(而不是RGB),则GD将无法加载它们(使用GD 2.0.12进行测试)。” 最后,还有关于由某些相机拍摄的图像在JPEG头中写入额外信息导致问题的评论。 希望这些想法中的一个能解决您的问题。 - Jeremy
这里加载了一个PNG格式的图片,但使用了JPEG格式的函数:imagecreatefromjpeg('https://foo/ABC123');,实际上该图片是image/png格式。 - Roland

5
我也遇到了同样的问题。 我们使用下面的代码来解决这个问题,对我有用:
...
$image = @ImageCreateFromJpeg($image_name);
if (!$image)
{
   $image= imagecreatefromstring(file_get_contents($image_name));
}
...

希望这可以帮助到您... :)

0

请查看php.net上的此错误:

https://bugs.php.net/bug.php?id=72404

他们建议:

$image = @ImageCreateFromJpeg($image_name);

if (!$image){$image= imagecreatefromstring(file_get_contents($image_name));}

-2

这张图片在Firefox(3.6.10)中会导致对服务器的无休止请求。Firefox显示它包含错误。


我刚在火狐 Mac 版(3.5.11)上尝试了一下,它可以正常打开。而且 Chrome 和 IE8 也没有问题... - Sherif Buzz
是的,我可以看到这张图片,但是加载永远不会结束,如果我尝试停止它,上面的错误就会出现。 - ilcartolaio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接