ttt

getttyent

(FreeBSD) PHP Warning: PHP Startup: Unable to loa

2007-03-08 21:53:50 | デジタル・インターネット

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


コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。