» home

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がなんなのかわからず。

By: funaki | 2008年2月15日 | いじる | Trackback | Comments [RSS 2.0]

コメントはまだありません。 »

RSS feed for comments on this post. TrackBack URI

コメントはお気軽にどうぞ

↑top