PHP5でSQLite
Vine3.2のPHP5でSQLiteを使う
「SQLite関数がありません」って?
パッケージもいろいろバージョンアップするのはいいんだけど、どうもよくわからんことが多過ぎる。Vine3.2のPHP5環境でSQLite関数が使えない。
sqlite_open( "test.db", 0660 );
なんて書くと、'Call to undefined function: sqlite_open()...' なんて言われてしまう。
SQLiteはPDO依存になった
マニュアルを読むと、
PHP 5 では、SQLite 拡張モジュールとエンジンは PHP 自身にバンドルされ、デフォルトでコンパイルされます。
しかし、PHP 5.1.0 以降では 手動で有効にする必要があります (共有モジュールとしてバンドルされるからで
す)。 さらに、PHP 5.1.0 以降では SQLite は PDO に依存するようになりました。そのため、 php.ini に以
下の行を (この順に) 追加して PDO も 有効にしておく必要があります。
extension=php_pdo.dll
extension=php_sqlite.dll
Linux あるいは Unix オペレーティングシステムでは、 もし PDO を共有モジュールとしてビルドしたのなら
SQLite も共有モジュールとしてビルドする必要があります。 そのためには、設定オプション
--with-sqlite=shared を指定します。
SQLite 3 は、PDO SQLite でサポートされます。 だそうである。拡張子 .dll は、こちらLinuxでは .so に読み変えるんだろう。ちなみに、コンソールで php -v すると
# php -v PHP 5.1.4 ....
なので、この問題にドンピシャあてはまる。(後でバージョンアップされて5.1.6になる)
php5-sqlite のインストール
しばらくSynapticで、ライブラリのリストをアップデートしてなかったが、やってみると、php5-sqlite というモジュールが別あつらえになっており、当然インストしなくちゃなんない(Development/Languages)。他のアプリケーションなどがかなり影響されるようだが、しかたがない...とインストしてみた。
設定ファイル /etc/php5/php.ini には、'Dynamic Extensions' の項で
;;;; ; 注意:パッケージ化された拡張モジュールは、/etc/php.d ディレクトリにある ; .ini ファイルにより読み込まれるようになりました。これらはデフォルトで ; 読み込まれます。 ;;;;
とあり、実際にはこれは、/etc/php5/php.d だが、その中の pdo_sqlite.ini に次の記述があるので、
; Enable pdo_sqlite extension module extension=pdo_sqlite.so
php.ini 側に書く必要はなさそうだ。ここまでやって、Apache2を再起動すればOKになり、php5-sqlite が使えるようになる。PHPは頻繁に進化しているのでいたしかたないが、どうもいくつかの入門書にはPHP5であればとりあえず何もしなくても、sqlite_open() 関数が使えるみたく書いてあるので、ここんとこ苦労である。