如何处理由上传有问题的 JPEG 引起的错误?

Posted

技术标签:

【中文标题】如何处理由上传有问题的 JPEG 引起的错误?【英文标题】:How to handle this error caused by uploading a problematic JPEG? 【发布时间】:2010-10-21 01:24:10 【问题描述】:

我有一个公众可以上传 JPEG 的网站。

公众中有人上传了无效的 JPEG,导致网站崩溃。

php 说...

imagecreatefromjpeg() [function.imagecreatefromjpeg]:gd-jpeg,libjpeg:可恢复错误:JPEG 文件过早结束

我不知道如何解决这个问题,所以我用谷歌搜索并找到了this site。它告诉我要添加...

ini_set('gd.jpeg_ignore_warning', 1);

我在我的index.php(我的网站的引导程序,我在其中做其他ini_set())中添加了它。

这似乎没有解决它。

如何处理这种无效 JPEG 的情况?我的 INI 集有什么问题吗?我在共享主机上,因此无法直接更改 php.ini

我使用的是 Kohana 2.3,以及它的 Image library,但我认为它在这里并不重要。

谢谢

【问题讨论】:

【参考方案1】:

尝试在命令前添加@ 字符:

$image = @imagecreatefromjpeg("file.jpg");
if(!$image) die("Sorry, bad JPEG");

它很脏而且可能已经过时(更不用说慢了),但它可能会让你的代码不会失败。

希望这会有所帮助!

【讨论】:

哦,我忘记了错误抑制运算符!谢谢,我知道它不推荐,而且丑得要命,但它可能是我唯一的希望。 @ 只有在完全不检查故障并允许传播时才会变得丑陋。由于您正在检查下一行的错误情况,因此@ 的用法是可以接受的。 @deceze 我很高兴编程之神批准:D @mattbasta 你在哪里学习了@ 函数。我通过阅读一本书来学习 php。它没有这个。搜索 php @ 找不到任何东西,我如何找到这些东西?【参考方案2】:

您通常会像这样使用imagecreatefromjpeg

$img = @imagecreatefromjpeg($file);
if (!$img) 
    // handle error yourself

注意imagecreatefromjpeg前面的@,用于抑制错误。不幸的是,我无法告诉您 Kohana 在内部是如何做到这一点的,以及是否可以说服它做同样的事情。

【讨论】:

也一样,只是使用了一个变量函数,因为它支持多个驱动程序。

以上是关于如何处理由上传有问题的 JPEG 引起的错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何在上传时仅旋转 jpg 和 jpeg?

如何处理由 setattr() 创建的属性?

如何处理由于从 Firestore DB 检索而多次运行的 UseEffect?

Laravel 上传多张带有错误 idback 的图像:“idback 必须是文件类型:jpg、jpeg、png。”

如何处理由 MLlib 生成的 Spark ALS 模型中的新用户/项目?

修改JDK的经历:两处字体的粗体代码引起的错误