
У меня проблема с моим сервером FreeBSD 7.1. Реализация PHP GD больше не работает с изображениями PNG. Всякий раз, когда система пытается работать с изображениями PNG, я получаю эти три сообщения об ошибках:
[Сб Июл 18 21:41:15 2009] [ошибка] [клиент 90.34.34.34] PHP Предупреждение: imagecreatefrompng() [function.imagecreatefrompng]: gd-png: фатальная ошибка libpng: [00][00][00][00]: неизвестный критический фрагмент в /usr/storage/www/private/mikkel.hoegh.org/modules/acquia/imageapi/imageapi_gd.module на строке 44, ссылка: http://mikkel.hoegh.org/admin/build/imagecache/3 [Сб Июл 18 21:41:15 2009] [ошибка] [клиент 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 [Сб Июл 18 21:41:15 2009] [ошибка] [клиент 90.34.34.34] PHP Предупреждение: imagecreatefrompng() [function.imagecreatefrompng]: 'sites/mikkel.hoegh.org/files/imagecache_sample.png' не является допустимым файлом PNG в /usr/storage/www/private/mikkel.hoegh.org/modules/acquia/imageapi/imageapi_gd.module на строке 44, ссылка: http://mikkel.hoegh.org/admin/build/imagecache/3
Я пытаюсь решить эту загадку уже полдня, и лучшая подсказка, которую я нашел, этоу другого парня та же проблема– однако решения там нет.
Код, о котором идет речь, довольно прост, он просто вызываетimagecreatefrompng($filename);
Версии всех пакетов, которые, как мне кажется, могут быть связаны:
- php5-5.2.10
- php5-gd-5.2.10
- png-1.2.37
- гд-2.0.35_1,1
Есть какие-нибудь подсказки?
решение1
Перед обновлениемвсегдачитать
/usr/ports/UPDATING
Иногда вам нужно будет выполнить рекурсивное обновление порта, например
portupgrade -fr png-1.2.37
решение2
Эта команда решила мою проблему:
portupgrade -fr png-1.2.40
решение3
Если вы используете portmaster, это сработает:
portmaster -dbrR png-1.2.40
решение4
Это может быть проблема с изображением PNG. Попробуйте очень простой код с очень маленьким черно-белым изображением PNG. Если это также генерирует те же ошибки в файлах журнала, то вы можете рассмотреть установку PHP из исходного кода, чтобы модули, такие как php_gd, обновились до последней версии.
Вы также можете попробовать установить
error_reporting = E_ALL
display_errors = On
на случай, если они дадут лучшее сообщение об ошибке на экране. Не забудьте сделать это display_errors=Off
после того, как вы закончите отладку на производственном сервере.