在FreeBSD上处理来自PHP的PNG图像时出现奇怪的GD错误

我的FreeBSD 7.1服务器有问题。 PHP的GD实现不再适用于PNG图像。 每当系统尝试使用PNG图像时,我都会得到这三个错误消息:

 [星期六7月18日21:41:15 2009年] [错误] [客户端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中的未知关键块,referer:http://mikkel.hoegh.org/admin/build / imagecache / 3
 [2009年7月18日星期六21:41:15] [error] [client 90.34.34.34] PHP Warning:imagecreatefrompng()[function.imagecreatefrompng]:gd-png错误:setjmp返回/ usr / storage / www / private中的错误状态/mikkel.hoegh.org/modules/acquia/imageapi/imageapi_gd.module on line 44,referer:http://mikkel.hoegh.org/admin/build/imagecache/3
 [星期六七月十八日21:41:15 2009] [error] [client 90.34.34.34] PHP Warning: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

任何线索?

在更新之前总是阅读

 /usr/ports/UPDATING 

有时你需要做recursionportupgrade即

 portupgrade -fr png-1.2.37 

这个命令解决了我的问题:

portupgrade -fr png-1.2.40

如果你正在使用portmaster,这将工作:

 portmaster -dbrR png-1.2.40 

这是freebsd中非常古老的bug。

extensions.ini ,stringextension=gd.so需要是第一行。

这可能是PNG图像的问题。 尝试非常小的黑白PNG图像的基本代码。 如果这也会在日志文件中产生相同的错误,那么你可以考虑从源代码安装PHP,以便像php_gd这样的模块更新到最新版本。

你也可以尝试设置

 error_reporting = E_ALL display_errors = On 

以防他们在屏幕上提供更好的错误信息。 请记住在生产服务器上完成debugging后,使display_errors=Off

我有一个类似的近期问题。 升级7.2系统上的一个软件包之后,我的phpBB2安装的gd驱动的validation码就停止工作了。 我重新构build了所有的PHP端口,并修复了它自己。

我知道这有点大,但有时候会因为依赖关系不稳定而在数月的增量升级之后崩溃。

没有答案,但因为我不能留下任何评论; 我有一个完全相同的问题和完全相同的版本7.2系统。 甚至试图降级libpng无济于事。 从7.1进行二进制升级。 到7.2是非常痛苦,非常值得,但不认为这将解决问题:-)

我也安装了pecl-imagick,看看我是否可以使用它,但令我惊讶的是我有类似的错误。 我尝试了很多依赖于libpng的其他软件,但是它们都可以加载php5-gd和pecl-imagick中的错误。 这使我排除了libpng,起初我以为是问题。 我的下一个猜测是,在PHP API的东西已经改变,我会尝试降级PHP,看看是否有帮助。