ふと思い立って、SQLite サポートを OS X Server に突っ込んでみた。
本来なら pear install SQLite を実行すりゃしまいのはずだが、先日入れた gd.so のせいで pear コマンドがクラッシュする ...orz...。
[argent:apache_mod_php-18/w/SQLite-1.0.3] shiro% pear dyld: NSLinkModule() error dyld: Symbol not found: _php_sig_gif Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20020429/gd.so Expected in: flat namespaceTrace/BPT trap
php_sig_gif は stand/image.c に定義されている、PHP の本体側に実体が存在する変数なのだが、どうも pear とかコマンドライン版 php ではこれが入ってないみたいだ。
ああ、Mac OS X の、Mach由来のせいで妙な癖のある ld でありがちなトラップだ、これ(--;
作るときに不要なものを消しちまうと言うか、デッドモジュールに見えるものを消しちゃうと言うか、そういう傾向があるのよね。apache にひっつく方の php モジュールのようなローダブルモジュールの場合、「最終的にどれが必要か」がそのコードだけだと判別できないから残るけど、コマンドのように実行バイナリの場合、「どれが必要か」が一見分かっちゃうから。
( Ruby の某所に無意味に objc_msgSend() 関数が埋められているのはそうした事情からです。)
まー、pear が使えなくても何とかなるさ。
SQLite-1.0.3.tgz をダウンロード、phpize して(例によってパーミッションエラーが出るのでパーミッション直しちゃ実行を2,3回繰り返し)、./configure ; make ; make install で突っ込む。
/etc/php.ini にextension ディレクティブを追加。具体的には これまでの記述に加えて extension = sqlite.so と記載する。extension ディレクティブは続く文字列さえ異なるなら、複数記述しても OK らしい。(逆に同じモジュールを二度記載すると駄目っぽい)
argent に追加したのにうっかり silver の方の phpinfo.php をよんで「phpinfo(); の出力に sqlite がでないー」としばし悩んだ以外は特に問題なし。
あ、文字コードが iso8859 になってたか。これは直し方が分からなかったので、「env PHP_SQLITE_UTF8=yes ./configure」とかなり強引なことをして対処。てか PHP_SQLITE_UTF8 を指定する configure の構文がないのだが、どうやってるんだろ? (PHP_SQLITE_UTF8 変数自体は configure スクリプトを読みました)
これで sqlite に書き込む文字コードは UTF-8 になり、とりあえず日本語も一応使えるはず。
しかし、全てが終わってから気がついたが、dbx に対応してないのね、SQLite モジュールって。つまり sqlite_* 関数を呼び出す、sqlite 専用のコードを書かないといけないと。うーん、これが某 PHP Cracks にのってた、ruby のまつもと氏の発言にある「dbx が云々」という事か。
ま、そういう事は後で考えるか。