gpt4 book ai didi

php - imagecreatefrompng(和 imagecreatefromstring)导致不可恢复的 fatal error

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:36 30 4
gpt4 key购买 nike

当我尝试在不正确的 png 图像上使用 php-gd 函数时,出现致命的 PHP 错误。这似乎是某种错误,因为根据函数文档(例如 imagecreatefrompng):

* @return resource 成功时返回图像资源标识符,错误时返回 false。

但是当我尝试用我不正确的图像来做时,我有:

fatal error :imagecreatefrompng():gd-png:致命 libpng 错误:读取错误:/var/www/common/models/Utils.php 中第 61 行的数据被截断

导致这个错误的代码很简单:

$handle = imagecreatefrompng($fname);

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

imagecreatefromstring 尝试从同一字符串创建图像时,行为相同。

我无法“修复”这张图片,因为它是用户提供的,所以我需要处理这种情况。

我试过像这样使用 try...catch block :

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 block 处理它,我根本不知道如何处理或修复它。有什么想法吗?

UPD:这似乎是一个非常奇怪的环境错误,因为当我在 Windows(使用 PHP 7.0)下运行相同的代码时,它会产生正确的“警告”错误。

UPD2: 好像是那个新鲜的 bug https://bugs.php.net/bug.php?id=73986

最佳答案

聚会有点晚了,但我也遇到了这个问题,迫不及待地想将错误修复包含在我的 ubuntu LTS 中我发现的唯一干净的解决方法实际上是使用 Imagick::valid() 检查图像是否有效。

function imageIsValid($path)
{
try
{
$imagick = new \Imagick($path);

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

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

关于php - imagecreatefrompng(和 imagecreatefromstring)导致不可恢复的 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45174672/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com