SQLite が Perl から使えなかった件


レンタルサーバで SQLite を使わせてもらおうと試みたが SQLite データベースをディレクトリで入出力する際に解決できないエラーが発生。オンメモリでは利用できるがファイルにするとダメ。

困ったことにサーバが prester.org は共用レンタルかつ IIS で Unix/Linux 系 OS のサーバとは Perl の作法も一部異なる。問い合わせたり色々試したりしたが、レンタルサーバではパーミッションや上流の設定まで自分で直接確認ができないため、設定に関するコレ以上の試行錯誤や追求はもはや時間の無駄じゃね?的な判断で Perl からの SQLite 利用は撤退。PHP からライブラリ試したら簡単に動いてしまったからというのもある。

とりあえず prester.org ドメインと現状でできることを工夫してやろう、なので頭脳を切り替えて PHP でスクリプトを書くことにした。問題は PHP をほぼ触ったことが無い。なにこれオイシイの?状態からのスタートである。マジでオイシイのこれ?

まず PHP のバージョンを取得して気がついたのだが最新というわけではない。SQLite に関しては PHP に付属するものを使うから PHP のバージョンによって利用できる SQLite ライブラリもバージョンが異なる。ウェブから作られたデータベースファイルが SQLite3 互換ではなく SQLite2 形式でも仕方がない仕方がない仕方がない、ムリだ納得いかない。

しかし何度見直しても sqlite_libversion で取得した SQLite バージョンは 2.8.17 である。ライブラリが古いため作ったデータベースも SQLite3 に対応してないのだ。グギギギギギ。

SQLite2 でもいいかと思ったが

yarujyanai
まだ慌てる時間ではない。もう少しよく調べたら PDO ( PHP Data Objects ) があった。PHP 5.1 以降は PDO の SQLite 接続ドライバ 「 PDO_SQLITE 」 が利用できる。試しに PDO 経由で作成したデータベースを調べると SQLite3 形式で保存されていることも判明。

sqlite_libversion(); で取得した結果は 2.8.17 が返ってくる。リンクされている SQLite ライブラリが SQLite version 2 用の命令形= sqlite_open 関数で作ったファイルは SQLite2 系で保存される。SQLite2 のデータファイルを SQLite3 形式に直接変換はできない。

PDO を使った場合のバージョン取得はオンメモリで作ったデータベースに対する SELECT sqlite_version(); で可能だった。その結果利用できるバージョンは「SQLiteVersion3.7.7.1」であると判明。やや古いけど満足。PHP 付属のライブラリ経由の SQLite と PDO 経由の SQLite でバージョンが違うことも確認できた。

確認用:http://prester.org/mmf2/cgi/maps/PDO_sqlite_Version.php

参考:http://www.php.net/docs.php


Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です