昨日にひきつづき、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よりも後へ移動。