我的 FreeBSD 7.1 服务器有问题。PHP 的 GD 实现不再适用于 PNG 图像。每当系统尝试使用 PNG 图像时,我都会收到以下三个错误消息:
[2009 年 7 月 18 日星期六 21:41:15] [错误] [客户端 90.34.34.34] PHP 警告:imagecreatefrompng() [function.imagecreatefrompng]:gd-png:致命的 libpng 错误:[00][00][00][ 00]:第 44 行 /usr/storage/www/private/mikkel.hoegh.org/modules/acquia/imageapi/imageapi_gd.module 中的未知关键块,参考:http://mikkel.hoegh.org/admin/build /imagecache/3 [2009 年 7 月 18 日星期六 21:41:15] [错误] [客户端 90.34.34.34] PHP 警告:imagecreatefrompng() [function.imagecreatefrompng]:gd-png 错误:setjmp 在 /usr/storage/www/private 中返回错误条件/mikkel.hoegh.org/modules/acquia/imageapi/imageapi_gd.module 第44行,参考:http://mikkel.hoegh.org/admin/build/imagecache/3 [2009 年 7 月 18 日星期六 21:41:15] [错误] [客户端 90.34.34.34] PHP 警告:imagecreatefrompng() [function.imagecreatefrompng]: 'sites/mikkel.hoegh.org/files/imagecache_sample.png' 不是第 44 行 /usr/storage/www/private/mikkel.hoegh.org/modules/acquia/imageapi/imageapi_gd.module 中的有效 PNG 文件,引用者:http://mikkel.hoegh.org/admin/build/imagecache/ 3
我已经尝试了半天来解决这个问题,我发现的最好的线索是另一个有同样问题的人——不过那里没有解决方案。
有问题的代码相当简单,它只是调用imagecreatefrompng($filename);
我能想到的所有软件包的软件包版本可能是相关的:
- php5-5.2.10
- php5-gd-5.2.10
- png-1.2.37
- gd-2.0.35_1,1
有什么线索吗?
在更新之前总是阅读
有时您需要进行递归端口升级,即
这个命令解决了我的问题:
端口升级-fr png-1.2.40
如果您使用的是 portmaster,这将起作用:
这是 freebsd 中非常古老的错误。
在
extensions.ini
字符串extension=gd.so
中需要是第一行。PNG图像可能有问题。尝试使用非常小的黑白 PNG 图像的非常基本的代码。如果这也会在日志文件中产生相同的错误,那么您可以考虑从源代码安装 PHP,以便将 php_gd 等模块更新到最新版本。
您也可以尝试设置
以防他们在屏幕上给出更好的错误信息。请记住
display_errors=Off
在生产服务器上完成调试后进行。我最近遇到了类似的问题。在我的 7.2 系统上升级其中一个软件包后,我的 phpBB2 安装上的 gd 驱动的验证码停止工作。我重新构建了所有的 php 端口,它自己修复了。
我知道这有点模糊,但有时由于依赖关系失控,几个月的增量升级会出现问题。
没有答案,但因为我不能发表任何评论;我有一个 7.2 系统,有完全相同的问题和完全相同的版本。甚至尝试降级 libpng 无济于事。从 7.1 进行二进制升级。到 7.2 非常轻松且非常值得,但不要认为这会解决问题 :-)
我还安装了 pecl-imagick 以查看是否可以使用它,但令我惊讶的是,我遇到了类似的错误。我尝试了许多其他依赖于 libpng 的软件,但它们都可以加载在 php5-gd 和 pecl-imagick 中给出错误的图像。这让我排除了 libpng,起初我认为这是问题所在。我的下一个猜测是 php API 中的某些内容发生了变化,我将尝试降级 php 并查看是否有帮助。