2009年11月27日金曜日

PHP Warning: imagecreatefrompng(): gd-png: fatal libpng error: [00][00][00][00]: unknown critical chunk in ...

はじめてこのエラーを見たのは、もう数ヶ月前ですが、今日、久しぶりに、また見てしまいました。



PHPで、GD経由でPNG形式の画像ファイルを読み込むとき、まあ、こんな1行だけのプログラムなんですが・・・



% cat /tmp/hoge.php
<?php
$im = imagecreatefrompng("hoge.png");
?>



こういうエラーが出たりします。Warningになってるけど、実質的にはエラーですよ、これって・・・



PHP Warning:  imagecreatefrompng(): gd-png:  fatal libpng error: [00][00][00][00]: unknown critical chunk in /tmp/hoge.php on line 2
PHP Warning:  imagecreatefrompng(): gd-png error: setjmp returns error condition in /tmp/hoge.php on line 2
PHP Warning:  imagecreatefrompng(): 'hoge.png' is not a valid PNG file in /tmp/hoge.php on line 2



もちろん、読み込もうとしているPNGファイルが破損しているわけではありません。



どうも、PNGのライブラリのバージョンが上がったときに、そのPNGライブラリに依存する別ソフトウェアも更新が必要なのに、それをしていないとき、このエラーが出るっぽいです。



ネット検索してみると、FreeBSDでよく発生しているみたいです。
「portupgrade -fr png しろ」みたいな解決方法が示されていますので。



portsのpngに依存している他のportsも、バージョンの更新が必要だけど、更新されない・・・みたいな問題があるんでしょうか。



今、portsのpngは、png-1.2.40で、はじめてこのエラーが出たのは、pngがもっと古いバージョンのときでした。



以前この問題が出たときは、png、gd、php5-gd、あたりをportupgradeしなおしたら直った記憶があるんですが、今回はなぜかうまくいかなかったです。



あれ?ひょっとすると・・・PHPでPNGを読み込む機能をあまり使っていなかったんで、今回問題が発覚したマシンでは、ずっと前にpngの問題が起きた時点から、ず~っと、直ってないままだったのかもしれないけど・・・



何も考えずに「portupgrade -fr png」をすると、うちの環境では、200個くらい、再ビルドされるようで(どうしてそんなものが?!っていう気もするんだけど)、しかもその中にはかなりの重量級アプリも含まれているため、そう気軽にはできません。



問題が発生しているマシンが複数台あったので、なんとなくの直感でportupgrade -fを繰り返してみたんですが、くさいところ



  • freetype2-2.3.9_1


  • gd-2.0.35_2,1


  • jpeg-7


  • libxcb-1.4


  • pecl-pdflib-2.1.6_1


  • php5-gd-5.2.11_2


  • pkg-config-0.23_1


  • png-1.2.40


を再ビルドすることで、直りました。



pecl-pdflibが再ビルドされた時点で、直ってたことを確認できたんですが、pecl-pdflibなんて、全然関係なさそうなんだけどなぁ。





今日のリンコが言ってたこと。ぜんぜん、意味がわかんない[E:sign02]





20091126



「ドアノブを回すようにするんだってば。」





これ、何のこと?





0 件のコメント:

コメントを投稿