当我尝试对不正确的png图像使用PHP函数时,会出现致命的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";
但脚本只输出“开始”,然后死亡,并显示错误描述,我已经张贴在上面。
Ubuntu16.04.2,PHP7.0,php7.0-gd扩展,都是最新版本。
所以我不能用try...catch块来处理它,也不知道如何处理或修复它。有什么想法吗?
UPD:环境下的错误似乎很奇怪,因为当我在Windows7.0下运行相同的代码时,它会产生正确的“警告”错误。
UPD2:,似乎是那个新鲜的虫子https://bugs.php.net/bug.php?id=73986
发布于 2018-01-22 16:55:05
聚会有点晚了,但我也遇到了这个问题,不能等到我的ubuntu中包含了bug修复--我找到的唯一干净的解决方法实际上是使用Imagick:: valid ()检查映像是否有效。
function imageIsValid($path)
{
try
{
$imagick = new \Imagick($path);
return $imagick->valid();
}
catch (\Exception $e)
{
return false;
}
}
当然,您的服务器/主机需要安装php imagick扩展名.
发布于 2017-07-18 19:42:12
由于PHP7所有的错误都是异常,所以您可以简单地将脆弱的代码部分包装在try-catch块中,以捕获\Throwable异常并相应处理。
https://stackoverflow.com/questions/45174672
复制相似问题