sseze's blog

インターネットとガジェットが好きな人のブログです

ご無沙汰してたUbuntuのPHPが腐っていた件

先日、某プログラミング初め(ぞめ)イベントで久々に自分のノートPCでPHPのコードを書いたときのこと。
変数の値をデバッグプリントしようとCUIで実行してみると、

Failed loading /usr/lib/php5/20090626+lfs/xdebug.so:  /usr/lib/php5/20090626+lfs/xdebug.so: cannot open shared object file: No such file or directory
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/mysql.so' - /usr/lib/php5/20090626+lfs/mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/mysqli.so' - /usr/lib/php5/20090626+lfs/mysqli.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/pdo_mysql.so' - /usr/lib/php5/20090626+lfs/pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/sqlite.so' - /usr/lib/php5/20090626+lfs/sqlite.so: cannot open shared object file: No such file or directory in Unknown on line 0


と、エラーメッセージが出まくってしまい、どうもビルドに失敗している模様。
ハッカソンにも関わらず、他のメンバーのPC上でデバッグをしてもらうというまさかの大失態。。。


Symfony2の開発環境を入れてからしばらくPHPのメンテナンスはご無沙汰だったのと、同時にVPSでソースによるビルドも試していたせいで、自分がどういう風に開発環境を構築したのか思い出せず、とりあえずエラーメッセージでググってみたのですが、英語版のUbuntuフォーラムで

i did the following: apt-get install php5-mysql and now the error is:

Were they the regular updates that broke your php5-mysql or a version upgrade?
You are using 10.04 as I can see from your details? If correct, try

Code:
sudo aptitude install --reinstall php5-mysql

などと書いてあるので試しにphp5-mysqlを入れ直したところ、sqlite.so以外の項目はエラーメッセージが消えました。
SQLiteも同じ方法で消えるのかと思いきや、そういう訳ではないみたい。
エラーメッセージでググッてみるとsqlite.ini消しちまえばなんとかなるっしょ!みたいなページがヒットしたのだが、なんだか根本的な解決にはなっていない気がした。

$ locate sqlite.so
/usr/lib/libsqlite.so.0
/usr/lib/libsqlite.so.0.8.6
/usr/lib/php5/20090626+lfs/pdo_sqlite.so

sqlite.so入ってないっぽい。

.soのファイルはCで書かれたPHP拡張モジュールのことで、PECLでインストールするらしい。

$ sudo pecl install sqlite
downloading SQLite-1.0.3.tgz ...
Starting to download SQLite-1.0.3.tgz (371,189 bytes)
............................................................................done: 371,189 bytes
50 source files, building
running: phpize
Cannot find config.m4.
Make sure that you run '/usr/bin/phpize' in the top level source directory of the module

If the command failed with 'phpize: not found' then you need to install php5-dev packageYou can do it by running 'apt-get install php5-dev' as a root userERROR: `phpize' failed

↑のエラーメッセージだと、php5-devをインストールすればいい感じだが、upgradeしても上手くいかない。ここで詰まった。
要はphpizeを使うためのconfig.m4っていうモジュール(?)を入れる必要があるらしいのだが、ソースからビルドしたり何なりする必要があるって情報しか出てこない。そもそもSQLiteを使うつもりはなかったので、ここで諦めた。(というかいつの間にSQliteとか手を出してたんだ俺は…)


ひとまず今回は、sqlite.iniをリネームして無効化させることでエラーメッセージは消えた。

$ sudo mv /etc/php5/conf.d/sqlite.ini /etc/php5/conf.d/sqlite.ini.old
$ php -v
PHP 5.3.6-13ubuntu3.3 with Suhosin-Patch (cli) (built: Dec 13 2011 18:37:10) 
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
    with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans


余談だが、PHP上でMeCab(形態素解析で有名なプログラム)を動かすぞーっていうときには↑の問題に立ち会う必要が出てくるみたい。



参考サイト:
[ubuntu] Updated packages now php/mysql is not working - Ubuntu Forums
Centos5でSQLiteを使うには | あいしん スタッフぶろぐ
メモ 【php】zlibのインストール