extensionの読み込み順でハマった
php_exifエクステンションを有効にしたら、また昨日みたいに動かなくなった。
しかも今度はコマンドラインですらエラーが出る始末。
php_mbstring.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。
こんなダイアログが出てくる。
ちなみに、「開始できませんでした」といいつつ普通に動く。exifは無効になっているがmbstringは有効になっている状態で。
ロード順に注意
どうやらphp_exifはphp_mbstringに依存しているようなので、php_mbstringを先にロードしてあげなければいけないらしい。
extension=php_mbstring.dll extension=php_exif.dll
こんな感じでphp_mbstringを先に書いておく。
標準で添付されているphp.ini-distやphp.ini-recommendedはファイル名のアルファベット順で並んでいるから、単にコメント解除するだけだとこういうことになる。なんだよちくしょうヽ(`Д´)ノ
PHPXref
ちなみにphp_exifを有効にしたのは画像処理がしたかったわけでもなんでもなく、単にPHPXref用に全ての関数一覧を取りたかっただけ。PHP4の関数一覧しか同梱されてなかったので。
だけど、試しにCakePHPのソースを丸ごと食わせてみたらCore 2 Duo 2.33GHz、2.48GBメモリのPCでも8分弱かかったのと、なんだか実装コードが微妙だったので利用は見送ることになりそう。
まぁクロスリファレンスなんで処理が大変なのかもしれないけど。
PHPXref用関数一覧作成
今回使ってみたv0.7にはPHP4のリストしか同梱されていなかったのでPHP5の一覧を取得する。
<?php $list = get_defined_functions(); $internal = $list['internal']; sort($internal); foreach ($internal as $func) { echo "$func\n"; }
しかし、同梱のphp4_functionlist.txtと比較すると何故かものすごい勢いで関数が足りない。
同梱のリストは3488あるのに、PHP 5.2.9-1で上記のスクリプトを実行*1しても1981しか出てこない。PECLとかてんこ盛りバージョンなんだろうか。
というわけで、自力extension分までどうにかするのは面倒なので、マージすることにした。
use strict; use warnings; my %list; while (<>) { chomp; $list{$_}++ if ($_ ne '_'); } print "$_\n" for (sort keys %list);