PHPでSQLiteに書き込もうとしてGeneral error: 14 unable to open database file が出たときの対処

PHP5.2.5でPDOからSQLiteに普通にINSERTしようとしたとき、
Warning: SQLSTATE[HY000]: General error: 14 unable to open database file ...
とエラーが出て困った。SELECTは問題なくできる。

SQLiteのファイルのパーミッションが644だったりすると
Warning: SQLSTATE[HY000]: General error: 8 attempt to write a readonly database
というエラーが出るのだが、666にしてあったのでこれではない。

結論としては、SQLiteのファイルを置いたディレクトリに書き込み権限が必要だった。(apacheの実行ユーザとかの)
下記のページを見て解決したのだが特にバグ、というわけでもないらしい。
[sqlite] Problems with SQLite and PHP
Re: [sqlite] Problems with SQLite and PHP

SQLite needs to be able to create and delete a journal file during
database modification.

マニュアルのコメントにも載っていた。
PHP: SQLite – Manual

いずれにせよ、unable to open database fileというのは不親切なエラーメッセージだと思う。

PHPのソースコードをちょっと追ってみた。
ext/pdo_sqlite/sqlite/src/os_unix.c
を書き換えればいいのかな?
実際にエラーが起きている箇所を特定できなかったが、sqlite3UnixOpenExclusive()だろうか。/var/tmp内にテンポラリファイルは開きそうなコードなのだがこのディレクトリは777でも関係なかった。sqlite3UnixTempFileName()にあるsqlite3_temp_directoryがなんなのかわからず。

This entry was posted in いじる. Bookmark the permalink. Both comments and trackbacks are currently closed.

2 Trackbacks

Page optimized by WP Minify WordPress Plugin