肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

パッケージで入れたPHP 5に最新版sqlite拡張を入れる


複雑な事情はあれど、とりあえずPHP5をパッケージで入れた人むけ。
PHP5の最新版をCentOSFedoraでも)にパッケージで入れる方法は、こっちに書いてある。⇒ #10 PHPのインストール・設定::VMWare×CentOS5 Windowsでカンタン開発環境 - 肉とご飯と甘いもの @ sotarok


で、実はこれで入れると、 without-sqlite されていて、php-pdo 入れれば sqlite3 系は使えるけど、sqlite2系の関数が使えない。

utterramblingsを探す

% yum info "php-*"

php-sqliteなどは無い。。。。

そいういうときはPECLだ!

と思ったら

% 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
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
building in /var/tmp/pear-build-root/SQLite-1.0.3
running: /tmp/pear/download/SQLite-1.0.3/configure
(snip...)
running: make
/bin/sh /var/tmp/pear-build-root/SQLite-1.0.3/libtool --mode=compile gcc -I/tmp/pear/download/SQLite-1.0.3/libsqlite/src -I. -I/tmp/pear/download/SQLite-1.0.3 -DPHP_ATOM_INC -I/var/tmp/pear-build-root/SQLite-1.0.3/include -I/var/tmp/pear-build-root/SQLite-1.0.3/main -I/tmp/pear/download/SQLite-1.0.3 -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  -DHAVE_CONFIG_H  -g -O2   -c /tmp/pear/download/SQLite-1.0.3/sqlite.c -o sqlite.lo
mkdir .libs
 gcc -I/tmp/pear/download/SQLite-1.0.3/libsqlite/src -I. -I/tmp/pear/download/SQLite-1.0.3 -DPHP_ATOM_INC -I/var/tmp/pear-build-root/SQLite-1.0.3/include -I/var/tmp/pear-build-root/SQLite-1.0.3/main -I/tmp/pear/download/SQLite-1.0.3 -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 -DHAVE_CONFIG_H -g -O2 -c /tmp/pear/download/SQLite-1.0.3/sqlite.c  -fPIC -DPIC -o .libs/sqlite.o
/tmp/pear/download/SQLite-1.0.3/sqlite.c:56: error: 'BYREF_NONE' undeclared here (not in a function)
/tmp/pear/download/SQLite-1.0.3/sqlite.c:56: error: 'BYREF_FORCE' undeclared here (not in a function)
/tmp/pear/download/SQLite-1.0.3/sqlite.c:125: warning: initialization from incompatible pointer type
/tmp/pear/download/SQLite-1.0.3/sqlite.c:126: warning: initialization from incompatible pointer type
make: *** [sqlite.lo] エラー 1
ERROR: `make' failed

make でこける。。。

とりあえずPHP5.2.6のソースをダウンロード

そういうわけで、

から、php-5.2.6.tar.gzあたりをダウンロードしてきてください(現時点での最新版)

解凍

% tar zxvf php-5.2.6.tar.gz

ディレクトリを移動する

PHP本体にバンドルされている sqlite拡張のディレクトリへ移動。

% cd php-5.2.6/ext/sqlite 

あとはPECLをインストールするかのように

% phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
% ./configure
(snip...)
% make
(snip...)
%sudo make install

iniファイルの設置も忘れずに

% sudo vi /etc/php.d/sqlite.ini

で、内容が

extension=sqlite.so

apacheのリロードも忘れずに。

% sudo /etc/init.d/httpd graceful

やったー

ちなみに

真面目にやりたければソースからインストールしろっていう話。ゆとりパッケージを使っている人ばかりこういう問題が起こる。そして、sqlite拡張だけ独自管理になるので、例えばPHP 5.2.7 とか出たらまたインストールしなきゃなんだな。
--without-sqliteオプションをつけなければ自動で入ります。多分。