OpenPNE 3.8って鬼門じゃないかモシカシテw
何度も遭遇している画像が表示されない問題。
DBでレコードで確認した。データはちゃんとある。
ログを見るとエラーが出ていた。
PHP Fatal error: Call to undefined method PEAR_Error::load() in /~/OpenPNE3.8/lib/plugins/sfImageHandlerPlugin/lib/image/generator/sfImageGeneratorImageTransform.php on line 53
ナニソレ。
というか、なんで lib の中にまた lib があるんだよ。
ネオアームストロングサイクロンジェットアームストロング砲じゃねーか、完成度たけーなオイ(謎
なんでこんなもんがエラー吐くんだ?
あ、そういや前に3.6→3.8にした時も何かエラー出てたな。
試しに上記の通り日記を書く
を押してみたら、エラー。
やっぱりPHPがエラーを出している。前のとは違うけど 似たようなもんだ(雑
PHPは5.2.17で最低レベル(から僅かに上)を満たしているから動くはずなんだけど・・・。
まさか・・・PHPのバージョンか?
7系で動かしてみたら即答でエラーw
仕方ないのでPHPの推奨バージョンの5.6を入れてみた・・・けど変わらず。
ビルド中に文字色が違うワーニングが出まくって眼が痛くなるw
というか、3.8を新規にインストールして、移行をせずに動かして
管理画面から画像をアップロードしようとすると
PHP Fatal error: Call to undefined function exif_read_data() in /~/OpenPNE3.8/lib/model/doctrine/File.class.php on line 62
コレ。
っつーか、普通に新規インストールした状態でコレ。
使わせる気がないとしか思えないw
sfImageGeneratorImageTransform.php や exif_read_data() だから画像処理系。
情報を探すと大抵「yum install php-gd で動きましたー」的なものばかり。
ちゃんと php-gd とか libexif・libexif-devel は入っていて問題はないはずなんだけど、何故動かぬ。
っつーか、新規にインストールしただけなのに動かないってあり得ないだろ。やっぱりおま環か?
特に変なことはやってないんだけどな。
何が違うのか・・・。
・・・・・。
あ。
俺、CGI版のPHPをビルドして使っている・・・。
まさか・・・?
phpinfoで設定値を見ると見事にGDがない。
更に掘り下げて調べるとビルド時にオプションとして加えないと使えないことが判明。マジか('A`)
--prefix=/usr/local/lib/php-5.2.17 \
--with-config-file-path=/usr/local/lib/php-5.2.17/ini \
--with-libdir=lib64 \
--with-mysql \
--with-pdo-mysql \
--with-gd \
--with-jpeg-dir=lib64 \
--with-png-dir=lib64 \
--enable-mbstring \
--enable-exif \
--program-suffix=52
このあたりを指定して取り込んでおかないと画像系の処理でエラーになるっぽい。
てっきりライブラリの参照はPHPがよろしくやってくれるもんだと思っていた。
phpinfoでpngは指定しなくてもenableとして出てきたけど、jpegは行が表示されなかった。
pngは念のために書いておく。
x64仕様のOSだから、ディレクトリの指定先は lib64 。
exif もなんかエラーが出ていたので組み込んでおく。
で、この状態でビルドしてできたものを使って画像のアップロードをしたら
できたー!゚+.(・∀・)゚+.゚
それ以外の画像の表示も問題なし。
OpenPNEの設定
imagemagick_path: '/usr/bin/convert' ※デフォルト値
#image_generator_name: "GD" ※デフォルト値
詳細に書いてあるところを見かけなかったような気がする。
色々変えて試行錯誤したけど、結局デフォルト値に戻った。
GDはコメントアウトしてあって いかにも使わなそうな雰囲気なのに必要ってどういう嫌がらせだw
まとめ
3.8はPHP7系では動かない
3.10→3.8のアップグレードの手順でダウングレードする方法はエラーになって上手くいかない
新規セットアップ時にプラグインを取得できないため、手動で組み込む必要がある
古いバージョンのCGI版PHPで動かす場合は、ビルド時に必要ライブラリを組み込む必要がある