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() 関数が使えるみたく書いてあるので、ここんとこ苦労である。