2007年3月9日金曜日

(FreeBSD) PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20060613/sqlite.so' - /usr/local/lib/php/20060613/sqlite.so: Undefined symbol "spl_ce_Countable" in Unknown on line 0

昨日にひきつづき、FreeBSDでPHPネタ。



FreeBSDでpotsのlang/php5でインストールしたCLI版のPHPを実行すると、次のようなwarningメッセージが毎回表示されました。


% php hoge.php
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20060613/sqlite.so' - /usr/local/lib/php/20060613/sqlite.so: Undefined symbol "spl_ce_Countable" in Unknown on line 0


SQLiteを使う予定はないし、とくに悪影響も起きてなさそうだったので、無視していてもよかったのですが、気になったので一応調査。



同じようにphpをインストールした(つもりの)別のFreeBSD環境では、このメッセージが表示されないので、ktraceとかしながら違いを探してみたところ、原因が判明しました。



/usr/local/etc/php/extensions.ini



というファイルの中で、

extension=spl.so

という行が、

extension=sqlite.so

という行よりも後にあるときに、このメッセージが表示されるらしいです。



つまり、こういう順序になっていればいいらしいです。


extension=spl.so

extension=sqlite.so


undefinedになってたsymbolがspl.soの方で定義されているので、sql.soを先にロードしてやればよかった、ということのようです。



ちなみに、この2つの*.soは、いったいどこからやってきたかというと



% pkg_which /usr/local/lib/php/20060613/spl.so
php5-spl-5.2.1_3



% pkg_which /usr/local/lib/php/20060613/sqlite.so
php5-sqlite-5.2.1_3



となっています。ということは、もしかすると、make installした順序とか、portupgradeした順序によって、/usr/local/etc/php/extensions.ini 内の順序が変わってしまうんじゃないでしょうか?





(2007/11/20)



同様のWarningメッセージを、目撃しました。



PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20060613/http.so' - /usr/local/lib/php/20060613/http.so: Undefined symbol "spl_ce_Countable" in Unknown on line 0

# pkg_which /usr/local/lib/php/20060613/http.so
pecl-pecl_http-1.5.5



直し方も同様で、/usr/local/etc/php/extensions.iniの中で、行の順番を入れ方だけ。http.soをspl.soよりも後へ移動。





0 件のコメント:

コメントを投稿