2012年2月2日木曜日

sqliteでログをとってみよう。php編その2

sqliteでログをとってみたいけど、CentOSのyumのphp53では、なぜかいれることができなかった・・・
php5.1.2に戻すという手もあるけど、json関数はつかいたい・・・
仕方ないのでもうソースからコンパイルしちまおう。

ここまでが前回のあらすじ。
とりあえず、phpinfoを吐かせて現在のphpの状態を取得しておく。

とりあえず、まず古いphpを削除する。
# yum remove php53*
これで次のものが消えます。
php53
php53-cli
php53-common
php53-devel
php53-mbstring
php-pear
削除しました。

ターゲットは最新のphp-5.3.9とします。
とりあえず解凍
# tar zxvf php-5.3.9.tar.gz
解凍をすすめる。
さて、面倒なconfigureの設定ですが・・・とりあえず先ほどのphp53の設定を元にsqliteを有効にしたものをいれてみたいとおもいます。


./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --target=x86_64-redhat-linux-gnu --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --cache-file=../config.cache --with-libdir=lib64 --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --disable-debug --with-pic --disable-rpath --with-pear= --with-bz2 --with-exec-dir=/usr/bin --with-freetype-dir=/usr --with-png-dir=/usr --with-xpm-dir=/usr --enable-gd-native-ttf --without-gdbm --with-gettext --with-gmp --with-iconv --with-jpeg-dir=/usr --with-openssl --with-pcre-regex=/usr --with-zlib --with-layout=GNU --enable-exif --enable-ftp --enable-sockets --enable-sysvsem --enable-sysvshm --enable-sysvmsg --with-kerberos --enable-ucd-snmp-hack --enable-shmop --enable-calendar --with-libxml-dir=/usr --enable-xml --with-system-tzdata --with-apxs2=/usr/sbin/apxs --without-mysql --without-gd --disable-dom --disable-dba --without-unixODBC --disable-pdo --disable-xmlreader --disable-xmlwriter --disable-phar --disable-fileinfo --without-pspell --disable-wddx --disable-posix --disable-sysvmsg --disable-sysvshm --disable-sysvsem
こんな感じ→ですが、configureとおらなかった・・・
apxsがだめらしい。
yum で httpd-develをインストールします。
# yum install httpd-devel

さて、もう一度configureを・・・
今度はlibxml2か・・・
# yum install libxml2

次はどうだ・・・
configure実行・・・
あれ、同じところがエラーになったなぜ?
# yum install libxml*
こっちで再度トライ

Could not find pcre.h・・・peclねぇ・・・
yumでいくか・・・これも・・・
# yum install pcre*
さくっといれて再度挑戦

BZip2を入れ直せ・・・とでた。
# yum install bzip2*
yum超便利、yum万歳
入れ直せなのに、そのまま追加インストールしただけでconfigure再挑戦

今後はgmp.hか・・・
# yum install gmp*

configureを再開、成功したけど
--with-system-tzdata
このオプションが存在しないよ?っていわれた。たしかに--helpでみても対象オプションはないっぽい。
とりあえず外します。

最終的にはこうなりました。
./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --target=x86_64-redhat-linux-gnu --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --cache-file=../config.cache --with-libdir=lib64 --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --disable-debug --with-pic --disable-rpath --with-pear= --with-bz2 --with-exec-dir=/usr/bin --with-freetype-dir=/usr --with-png-dir=/usr --with-xpm-dir=/usr --enable-gd-native-ttf --without-gdbm --with-gettext --with-gmp --with-iconv --with-jpeg-dir=/usr --with-openssl --with-pcre-regex=/usr --with-zlib --with-layout=GNU --enable-exif --enable-ftp --enable-sockets --enable-sysvsem --enable-sysvshm --enable-sysvmsg --with-kerberos --enable-ucd-snmp-hack --enable-shmop --enable-calendar --with-libxml-dir=/usr --enable-xml --with-apxs2=/usr/sbin/apxs --without-mysql --without-gd --disable-dom --disable-dba --without-unixODBC --disable-pdo --disable-xmlreader --disable-xmlwriter --disable-phar --disable-fileinfo --without-pspell --disable-wddx --disable-posix --disable-sysvmsg --disable-sysvshm --disable-sysvsem

make開始
# make
おわったらテスト開始
# make test
テスト項目に
SQLite3::open error test [ext/sqlite3/tests/sqlite3_15_open_error.phpt]
というのがあったので、非常にいやな予感がしますが、とりあえずphpをつかえるようにしたいので、インストールする。
# make install

# php -r
で動作することを確認して、httpd.confを書き直す。

こちらを参考にして、php.confを作成しました。

あとは、noteAppでつかったcssの読み込み直しjsonデータ応答PHPをキックしたり、phpinfoをキックしたりしてみて動作を確認。
これで問題なしということになりました。

さて、肝心のsqliteですが・・・
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/20090626/sqlite.so' - /usr/lib64/20090626/sqlite.so: cannot open shared object file: No such file or directory in Unknown on line 0
こうなりました。正直20090626というディレクトリが謎です。

phpのsqlite用のライブラリをコンパイルしないとだめなんで
php-5.3.9/ext/sqliteでphpizeを実行
# phpize
# ./configure
# make
# make test
まできました。すると動作がほぼすべてエラーになった・・・なんだこれ。

気にせずインストールしちゃえってことでインストール
# make install

さて、cliで
<?php
$link = sqlite_open("3.db", 0666, $sqliteerror);
if(!$link) {
        die("error for connect" . $sqliteerror);
}
echo "connect ok\n";
sqlite_close($link);
echo "disconnect\n";
このコードを実行してみたところ・・・

$ php test.php 
connect ok
disconnect

やっとキター
テストでエラーになったのは、たぶんライブラリがうまく見れないとかそんなところだろう。

次は実際にphpでsqliteをいじってみよう。

追記:
よくよく調べてみたところsqlite_openってsqlite3じゃないみたいですね。
SQLite3クラスをつかって処理しないといけないみたいです。なんだったんだ。sqliteの手間は・・・

まぁあっても特に不都合はないのでこのまま放置しますけど。

0 件のコメント:

コメントを投稿