首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >imagecreatefrompng (和imagecreatefromstring)导致不可恢复的致命错误。

imagecreatefrompng (和imagecreatefromstring)导致不可恢复的致命错误。
EN

Stack Overflow用户
提问于 2017-07-18 18:41:14
回答 2查看 6.5K关注 0票数 6

当我尝试对不正确的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

导致此错误的代码很简单:

代码语言:javascript
运行
复制
$handle = imagecreatefrompng($fname);

在此字符串之后不执行任何代码。

在尝试从同一字符串创建图像时,imagecreatefromstring也是如此。

我不能“修复”这张图片,因为它是用户提供的,所以我需要处理这个案例。

我试图像这样使用try...catch块:

代码语言:javascript
运行
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-22 16:55:05

聚会有点晚了,但我也遇到了这个问题,不能等到我的ubuntu中包含了bug修复--我找到的唯一干净的解决方法实际上是使用Imagick:: valid ()检查映像是否有效。

代码语言:javascript
运行
复制
function imageIsValid($path)
{
    try
    {
        $imagick = new \Imagick($path);

        return $imagick->valid();
    }
    catch (\Exception $e)
    {
        return false;
    }
}

当然,您的服务器/主机需要安装php imagick扩展名.

票数 5
EN

Stack Overflow用户

发布于 2017-07-18 19:42:12

由于PHP7所有的错误都是异常,所以您可以简单地将脆弱的代码部分包装在try-catch块中,以捕获\Throwable异常并相应处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45174672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档