pecl install hoge でインストールしたとき、インストール先が extension_dir じゃないディレクトリになってしまう場合
Debain での話。
- 手元で色々 PHP いじってて環境が微妙なことになってしまったとき
- まぁ、こういうことになる人ってあんまいないと思うけど
$ sudo pecl install hoge
でインストールすると、
... checking for PHP includes... -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib checking for PHP extension directory... /usr/lib/php/20100525-debug checking for PHP installed headers prefix... /usr/include/php ...
おや?
で、当然 /etc/php5/conf.d/http.ini とかに
extension=http.so
とか書いても、
$ php -v PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/http.so' - /usr/lib/php5/20090626/http.so: cannot open shared object file: No such file or directory in Unknown on line 0 ...
とかいわれる。
extension のインストールされたディレクトリと、phpの設定がもってる extension dir が違うようだ。
$ php -i | grep extension_dir extension_dir => /usr/lib/php5/20090626 => /usr/lib/php5/20090626
となるから当然で。
あれ、じゃあなんで pecl install するときにここに入らないのだ、と思い一応 pecl config-show で確認。
$ pecl config-show ... PHP extension directory ext_dir /usr/lib/php5/20090626 ...
ちゃんとなっている。
ビルドのときには /usr/bin/php-config が使われるのでそれも確認
$ which php-config /usr/bin/php-config $ php-config ... --libs [-lcrypt -lz -lcrypt -lonig -lcrypto -lssl -lcrypto -ldb-4.8 -lqdbm -lbz2 -lz -lcrypto -lssl -lcrypto -lrt -lm -ldl -lnsl -lxml2 -lgssapi_krb5 - lkrb5 -lk5crypto -lcom_err -lxml2 -lxml2 -lxml2 -lcrypt -lxml2 -lxml2 -lxml2 -lxml2 -lcrypt ] --extension-dir [/usr/lib/php5/20090626-debug] --include-dir [/usr/include/php5] ...
あれ。
php-config は誰によってインストールされるか、
$ dpkg -S php-config php5-dev: /usr/share/man/man1/php-config5.1.gz php5-dev: /usr/bin/php-config5
php5-dev。だけど /usr/bin/php-config5 ってことは多分 /usr/bin/php-config は symlink にしてるんだな、と確認してみると、
$ ls -la /usr/bin/php-config -rwxr-xr-x 1 root root 4570 2012-02-03 08:36 /usr/bin/php-config
あれ。実体だ。
つまり原因は、
- 何かしらのタイミングで php-config が実体になっちゃった
- php5-dev をインストールしなおしても、update alternatives が働かない
- 何かしらのタイミングで実体になっちゃったものがずっとつかわれちゃってる
- pecl install のときにおかしくなる
ということなので、 /usr/bin/php-config を削除して php5-dev のインストールしなおし
$ sudo rm /usr/bin/php-config $ sudo apt-get remove php5-dev $ sudo apt-get install php5-dev ... php5-dev (5.3.10-1~dotdeb.1) を設定しています ... update-alternatives: /usr/bin/php-config (php-config) を提供するために 自動モード で /usr/bin/php-config5 を使います。 update-alternatives: /usr/bin/phpize (phpize) を提供するために 自動モード で /usr/bin/phpize5 を使います。m
で、再度確認
$ ls -la /usr/bin/php-config lrwxrwxrwx 1 root root 28 2012-02-06 11:47 /usr/bin/php-config -> /etc/alternatives/php-confi $ php-config ... --libs [-lcrypt -lz -lcrypt -lonig -lcrypto -lssl -lcrypto -ldb-4.8 -lqdbm -lbz2 -lz -lcrypto -lssl -lcrypto -lrt -lm -ldl -lnsl -lxml2 -lgssapi_krb5 - lkrb5 -lk5crypto -lcom_err -lxml2 -lxml2 -lxml2 -lcrypt -lxml2 -lxml2 -lxml2 -lxml2 -lcrypt ] --extension-dir [/usr/lib/php5/20090626] --include-dir [/usr/include/php5 ...
OK。
で、 pecl install してめでたし。