はじめてこのエラーを見たのは、もう数ヶ月前ですが、今日、久しぶりに、また見てしまいました。
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]
「ドアノブを回すようにするんだってば。」
これ、何のこと?
0 件のコメント:
コメントを投稿