【发布时间】:2017-12-23 18:53:55
【问题描述】:
当我尝试在不正确的 png 图像上使用 php-gd 函数时,我遇到了致命的 PHP 错误。这似乎是某种错误,因为根据函数文档(例如imagecreatefrompng):
* @return resource an image resource identifier on success, false on errors.
但是当我尝试使用不正确的图像进行操作时,我有:
Fatal error: imagecreatefrompng(): gd-png: fatal libpng error: Read Error: truncated data in /var/www/common/models/Utils.php on line 61
导致这个错误的代码很简单:
$handle = imagecreatefrompng($fname);
在这个字符串之后没有代码执行。
imagecreatefromstring 在尝试从相同的字符串创建图像时也有相同的行为。
我无法“修复”这张图片,因为它是用户提供的,所以我需要处理这种情况。
我尝试像这样使用try...catch 块:
echo 'start'."\n";
try {
imagecreatefromstring($result);
} catch (\Throwable $e) {
echo 'error'."\n";
return null;
}
echo 'success'."\n";
但脚本只输出“开始”,然后死掉并显示我在上面发布的错误描述。
Ubuntu 16.04.2、PHP 7.0、php7.0-gd 扩展,均为最新版本。
所以我不能用 try...catch 块处理它,我根本不知道如何处理或修复它。有什么想法吗?
UPD:这似乎是一个非常奇怪的环境错误,因为当我在 Windows(使用 PHP 7.0)下运行相同的代码时,它会产生正确的“警告”错误。
UPD2:好像是那个新鲜的bughttps://bugs.php.net/bug.php?id=73986
【问题讨论】:
-
也许这会对你有所帮助(png已损坏)stackoverflow.com/questions/41338201/…
-
@matiaslauriti 感谢您的评论。但有问题的是,你给那个人收到了可以轻松处理的“警告”错误。就我而言,我遇到了致命错误,所以事情变得更难处理了。
-
但问题是您遇到的错误,您的 PNG 似乎已损坏,您能否通过打开它们来确保您的 PNG 没有损坏?搜索Fatal error,你会发现很多信息。
-
@matiaslauriti 我必须使用 PHP 检查此文件是否损坏。此图片由用户提供,我不知道如何检查它是否损坏。如果我使用
getimagesize进行此类检查,它会返回正确的值(显示 mime 类型和大小)。你知道其他检查图像的方法吗? -
更新了问题和我的答案,可能的原因是:这是错误。谢谢你的帮助。