ttt

getttyent

PHP Warning: imagecreatefrompng(): gd-png: fatal

2009-11-26 23:59:00 | デジタル・インターネット

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

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なんて、全然関係なさそうなんだけどなぁ。

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

20091126

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

これ、何のこと?


コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。