Назад | Перейти на главную страницу

Странная ошибка GD при работе с PNG-изображениями из PHP на FreeBSD

У меня проблема с моим сервером FreeBSD 7.1. Реализация PHP GD больше не работает с изображениями PNG. Всякий раз, когда система пытается работать с изображениями PNG, я получаю эти три сообщения об ошибках:

[Sat Jul 18 21:41:15 2009] [error] [client 90.34.34.34] PHP Warning:  imagecreatefrompng() [function.imagecreatefrompng]: gd-png:  fatal libpng error: [00][00][00][00]: unknown critical chunk in /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
[Sat Jul 18 21:41:15 2009] [error] [client 90.34.34.34] PHP Warning:  imagecreatefrompng() [function.imagecreatefrompng]: gd-png error: setjmp returns error condition in /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
[Sat Jul 18 21:41:15 2009] [error] [client 90.34.34.34] PHP Warning:  imagecreatefrompng() [function.imagecreatefrompng]: 'sites/mikkel.hoegh.org/files/imagecache_sample.png' is not a valid PNG file in /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

Я пытаюсь решить эту проблему уже полдня, и лучшая подсказка, которую я нашел, это у другого парня такая же проблема - но решения там нет.

Рассматриваемый код довольно прост, он просто вызывает imagecreatefrompng($filename);

Версии пакетов всех пакетов, о которых я могу думать, могут быть связаны:

Какие-нибудь подсказки?

Это очень старая ошибка во freebsd.

В extensions.ini строка extension=gd.so должна быть первой строкой.

Если вы используете Portmaster, это будет работать:

portmaster -dbrR png-1.2.40

Эта команда решает мою проблему:

portupgrade -fr png-1.2.40

Перед обновлением всегда читать

/usr/ports/UPDATING

Иногда вам нужно выполнить рекурсивное обновление, т.е.

portupgrade -fr png-1.2.37

Это может быть проблема с изображением PNG. Попробуйте очень простой код с очень маленьким черно-белым изображением PNG. Если это также вызывает те же ошибки в файлах журнала, вы можете рассмотреть возможность установки PHP из исходного кода, чтобы модули, такие как php_gd, обновлялись до последней версии.

Вы также можете попробовать установить

error_reporting  =  E_ALL
display_errors = On

на случай, если на экране появится более точное сообщение об ошибке. Не забудьте сделать display_errors=Off после того, как вы закончили отладку на рабочем сервере.

У меня была недавняя проблема, похожая на эту. После обновления одного из пакетов в моей системе 7.2 капча, управляемая gd, в моей установке phpBB2 перестала работать. Я перестроил все порты php, и он исправился сам.

Я знаю, что это немного модно, но иногда что-то ломается в течение нескольких месяцев дополнительных обновлений из-за того, что зависимости выходят из строя.

Нет ответа, но поскольку я не могу оставлять комментарии; У меня система 7.2 с точно такой же проблемой и точно такими же версиями. Даже попытался понизить версию libpng, но безуспешно. Выполнение бинарного обновления с версии 7.1. до 7.2 было чрезвычайно безболезненно и того стоило, но не думайте, что это решит проблему :-)

Я также установил pecl-imagick, чтобы посмотреть, смогу ли я использовать это вместо этого, но, к моему удивлению, я получил аналогичные ошибки. Я пробовал много другого программного обеспечения, которое зависит от libpng, но все они могут загружать изображения с ошибками в php5-gd и pecl-imagick. Это заставило меня исключить libpng, что, как я сначала подумал, было проблемой. Мое следующее предположение - что-то в php API изменилось, я попытаюсь понизить версию php и посмотреть, поможет ли это.