それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

PHPでSQLiteに書き込もうとしてGeneral error: が出たときの対処

phpsqliteを使ってファイルを保存しようとしたら?エラー?

sqliteを使うときは、上位ディレクトリに書き込み権限が必要

つまり、このような状態でないと書き込みできない

takuya@~/Desktop/temp$ ls -la
total 0
drwxrwxr-x   3 takuya staff  102 11 24 19:24 .
-rw-rwxr--   1 takuya staff    0 11 24 19:24 sample.db

全ての権限をチェックすればエラーは出ない。

エラーメッセージはだいたい次のようになってたり。

General error:  14 unable to open database file

内包する上位ディレクトリの書き込み権限チェックとかちょっと頭悪そう。

sqliteのdb ファイルが777 でもファイル更新できない?え?なんで?

ちょっと何言ってんだこいつ状態なので、落ち着いて考えてみます。

実際にはどういうこと?

/path/to/sample.db

というSQLiteがあったとき

ジャーナリングトランザクションが必要になるので

/path/to/sample.db.journal

というファイルをつくることになる。

さらに、このjournal ファイルを削除するので、ディレクトリに「書込」の権限が必要です。

setfacl とかしてるときは更に削除にも注意が必要ですね。

なので、sqliteを使うときは、そのディレクトリに書き込み権限(ファイルを作成)が必要になる。 理屈がわかれば、安心ですね。不親切ではあるが、観察すればすぐわかる。

わかれば納得。ハマれば地獄。

参考資料

http://blog.zuzara.com/2008/02/15/248/