PukiWikiをCGIで動かす方法

サーバによっては、PukiWikiがそのまま正常に動作しないことがある。その現象としては主に以下の通り。

  • 閲覧はできるが、編集、更新が出来ない。
  • 更新しようとすると、パーミッションエラーが発生する。
    • 「パーミッションが違うか、またはファイル名が長い」というようなエラー。
  • chown でファイルオーナーを変更すると更新できる。
  • ところが、一定時間経過後に更新しようとするとまた失敗する。

この主な原因は、以下の2つ。

  • サーバが PHP に対応していない。
  • サーバで suEXEC が動作している為、ファイルオーナーがユーザに変更されている。

ファイルオーナーを chown で Webサーバ (apache) 変更すると更新が成功するようになる、という現象が確認できるサーバは suEXEC が原因と思って間違いない。

なぜなら、現に私がそうだったから!

これを解決するには、PukiWiki を CGI で動かすという方法がある。

確認事項

まず、サーバに CGI版PHP がインストールされているかどうかが重要。 これがないとどうしようもない。

suEXEC って?

suEXEC というものが私はよくわかっていないのだけど、 どうもこいつは、Webサーバの実行権限をユーザとして扱うプログラムのようで、 Webサーバが作ったり更新したりするファイルのオーナーは、 全てユーザになってしまうらしい。

つまり、“Webサーバはユーザである”と思い込むということ。

…であるクセに、Webサーバ自体は相変わらずWebサーバとして扱われ、 Webサーバがそのファイルをいじろうとすると、 「おまいのファイルじゃねぇyp!」と怒るわけで、わけわからん。

ファイルのパーミッション

公式サポートページによると、ファイルやフォルダのパーミッションの設定を、 次のように設定しなおすようにとある。

フォルダ

  • 755→705
  • 777→707

ファイル

  • 644→600(604)
  • 666→600(606)

これは、グループの全ての権限を奪えということか。

そして、PHPで直接動く場合は *.php ファイルの実行権限は読み取りのみで良いのだけど、CGIで動かす場合は実行権限を与えなければならない。 つまり、 *.cgi などにそうするように 755 を設定する。ただ、suEXEC 対応で、この場合もやはり 705 となるか。

あと、同ページによると、pukiwiki.ini.php のスクリプトのパスの設定を明記するように、とあるけど、これを有効にしてもしなくても、私の場合は動いた。

.htaccess の設定

PukiWiki を入れているフォルダの .htaccess に次の記述を追加する。

RemoveType .php
AddHandler cgi-script .php

以上で、とりあえずCGI版が稼動するようになる。

制限

モジュール版PHP(mod_php)でなくCGI版で動作させる場合、 PHPのhead()を使用するBasic認証が使用できない。

つまり、次のユーザ認証の設定が使えない。

$auth_users
$auth_read
$auth_edit
$auth_search

参考


テンポラリ記憶


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-05-15 (土) 12:07:45 (3741d)