Call to undefined function dl()

2011年10月24日月曜日 - 投稿者 さい 時刻: 22:43
PHP4のアプリケーションPHP5.3に移行していた際に躓いたこと。

こういう感じで普通に拡張モジュールをプログラムでロード。
今回はかの有名な全文検索モジュールnamazuだったわけですが。

if ( ! extension_loaded('namazu')) {
        if ( ! dl('namazu.so')) {
                abort( "なまずは泳げませんでした");
        }
 }

いざ実行してみると、 Fatal error: Call to undefined function dl() in... とdlの部分でげに恐ろしきFatal errorになる。
PHP公式マニュアルには『この関数は、PHP 5.3 以降でいくつかの SAPI からは削除されました。』とあるものの、普通のCGI版だし5.3.6だし動くはず・・・と小一時間悩む。
だいたいいくつかのSAPIって何が該当するのかもわからない。
configureも'--disable-debug'等余計なことはやってない。(enableでもなかったが)

で、結局下記の方法で解決。

  • php.iniのenable_dlをOffからOnに
enable_dl = On

  • dlで実際に呼んでいるモジュール(今回はnamazu.so)をphp.iniに追加
extension=namazu.so
※extディレクトリにはnamazu.soをいれておくこと。
php.iniでsoのフルパス指定でもおそらくOK。

なんと通ったよ!!やったー!やったよーー!!
ナマズが泳いだよー!!!

それにしてもdlで呼んでいるものをいちいち指定しなければならないのだろうか。謎。