CORESERVERで、habari を sqlite で動作させる

No Comments

ドキュメントルート直下に habari をインストールしようとした場合、下記の条件下では、CORESERVER で habari0.5.2 は動作させることはできないようです。

  • データベースに sqlite を利用している。
  • データベースファイル(habari.db)がドキュメントルート直下にある。(インストール時に初期設定のままにしておいたケース。)
  • PHP がモジュール版で動作している(.htaccess に設定を記述しない限り、通常はこのモードで動作しています。)

特に何も設定せずに、インストールを行った場合、このような状態になると思います。

ですが、このケースでは下記のようなエラーが出力され、動作しませんでした。

SQLSTATE[HY000]: General error: 14 unable to open database file in system/classes/databaseconnection.php line 261

この問題を解決するために、下記のような手順をとりました。

  1. すでに、habariをアップロードしている場合は、現在アップロードしているファイルを全て削除します。(所有者が「apache」となっているファイルはFTPソフトでは削除できません。CORESERVER に連絡して、所有者をあなたのアカウントに変更してもらいましょう。その後は FTP ソフトで削除できます。ファイル削除用の PHP プログラムを書くのも一つの方法ですが、初心者の方にはおすすめできません)
  2. 次に、「.htaccess.txt」というファイル名のテキストファイルを作り、下記の様に記述します。
    AddHandler application/x-httpd-phpcgi .php
  3. このファイルをアップロードします。
  4. アップロードした「.htaccess.txt」の名前を「.htaccess」へと変更します。
  5. 次に、habari-0.5.2.zip を解凍し。のファイルを全てアップロードします。
  6. あとは、アップロードしたindex.phpにアクセスして、インストールを行います。

この手順をおこなった後は、特に問題なく利用できるようになりました。

何が原因だったのか(ここから先は推測です)

今回の問題は、フォルダの所有者と、PHPを実行するユーザがバラバラだったために発生していたようです。

まず、sqlite は、データベースファイル(habari.db)のデータを更新する際に、このファイルが置かれているフォルダに、一時的に別のファイルを作成するようになっているようです。

sqliteを操作しているのは PHP を実行している apache というユーザです。ところが、このファイルを置いているフォルダの所有者は、あなたのユーザ名になっているはずです。

そのため、このフォルダに対して「その他のユーザ」が「書き込み」できるように、フォルダのパーミッションを変更しなくてはいけません。

ところが、CORESERVER では、ドキュメントルート(公開用フォルダ)のパーミッションを変更しても、一定時間ごとに元に戻すように設定されているみたいです。

このため、「その他のユーザ」に対して与えたはずの「書き込み」権限が取り消されてしまっていました。

そこで、今回の手順を行う事により、PHP をモジュール版ではなく CGI モードで動作させるよう設定しました。

CORESERVERの設定では CGI モードで PHP を実行させた場合、 .php ファイルの所有者がプログラムを作動させていることとして扱われます。

そのため、ドキュメントルートの権限は「所有者」が「書き込み」できればよいということになります。「その他のユーザ」に対する「書き込み」権限は必要ありません。

こうした事から、エラーが起こらなくなったものと思われます。

Be the first to write a comment!