症状
コマンドラインからPHPを実行すると、次のような警告が出る。
PHP Warning: Module 'pcre' already loaded in Unknown on line 0 PHP Warning: Module 'xml' already loaded in Unknown on line 0
スクリプトが動かないわけではない。
原因
/usr/local/etc/php/extensions.ini に次のように重複して定義されていたため(xml.soとpcre.soが2個ずつ定義されている)。
extension=mbstring.so extension=ftp.so extension=pcre.so extension=xml.so extension=pcre.so extension=xml.so
これは、次のようにバージョンの異なるパッケージが重複してインストールされていたため。
# pkg_info | grep php5 php5-5.2.0 PHP Scripting Language (Apache Module and CLI) php5-ftp-5.2.0 The ftp shared extension for php php5-mbstring-5.2.0 The mbstring shared extension for php php5-pcre-5.1.6_3 The pcre shared extension for php php5-pcre-5.2.0 The pcre shared extension for php php5-xml-5.1.6_3 The xml shared extension for php php5-xml-5.2.0 The xml shared extension for php
こうなってしまったのは、pearをportinstallではなくpkg_addでインストールしたのが原因。このために古いバージョンのものが入ってしまい、メッセージでそれに気づいてアップグレードしようとしたものの、portupgradeを使わずにportinstallしたため、二重にインストールされていた。
対処法
pearとその依存パッケージを削除し、新たにportinstallでpearをインストール。
# pkg_deinstall php5-pcre-5.1.6_3 php5-xml-5.1.6_3 # pkg_deinstall pear # portinstall pear