PHPセーフモード対策

PHPセーフモードが有効だと、何らかの対策をしないとDokuWikiがまともに動作しない可能性が高い。典型的エラーとして、/data/cache内のディレクトリにあるファイルの読み書きに失敗したりする。 これは、

  • DokuWikiのPHPスクリプトの所有者……FTPでファイルをアップロードした場合、通常は「あなた自身」になる
  • DokuWikiのPHPスクリプトが作ろうとするディレクトリの所有者……ApacheがWebサーバの場合、DokuWikiを使っているのが誰であっても「ApacheがPHPスクリプトを動かしてディレクトリを作る」ので、apacheになる

という風に所有者が異なり、mkdir()など一部の関数が制限を受けるため。

PHPセーフモードが無効だと、同じサーバにある他人が作ったディレクトリ内に対して様々な事が出来てしまう可能性が出てくるため、通常は有効になっている。

safemodehackを使う

DokuWikiのsafemodehackを有効にするとFTPでディレクトリを作成するようになり、スクリプトの所有者とディレクトリの所有者が「あなた自身」で一致するため、セーフモードに関わるトラブルをおおむね回避出来るようになる。

まず、所有者がapacheになっているディレクトリがあったら、所有者をFTPユーザーに変更するか削除する。

FTP設定とパーミッション

管理ボタン→サイト設定をクリック。

  • セーフモード対策を行う……有効にする
  • FTPサーバー名……FTPのサーバ名(例:ftp.example.com)
  • FTPポート……ポート(例:21)
  • FTPユーザー名……FTPを使う際のユーザー名(例:user)
  • FTPパスワード……FTPのパスワード
  • FTPルートディレクトリ……FTPで表示されるパスまでのディレクトリ。たとえば、/virtual/user/public_html/example.com/dokuwiki/dataにデータディレクトリがあるがFTPログイン時は/public_html/example.com/dokuwiki/dataとなる場合、/virtual/userを指定する。

また、safemodehackを行うと、PHPスクリプトの所有者(あなた自身)とディレクトリの所有者(あなた自身)が一致する代わりに、PHPスクリプトの動作ユーザー(apache)とディレクトリの所有者(あなた自身)が違ってくる。
よって、apacheがディレクトリ内のファイルの作成・消去・読み書きを出来るよう、管理ボタン→サイト設定→フォルダ生成マスクを0777などに変更する。

新たに作られるディレクトリは、所有者があなた自身でパーミッション777などになる。新たに作られるファイルは、所有者がapacheでパーミッション644になる。

xrea+限定

xrea+は、.htaccessファイルに以下の「AddHandler application…」という1行を書き足すだけでPHPをCGIモードのように動かす事が出来、セーフモード関連の問題をある程度回避出来る。
ただ、最初はその1行だけで対策していたのですごく簡単に感じたけど、挙動不審な箇所を直していくにつれ、簡単とは言えなくなってきた。とは言え、こっちの方法なら番号の古いxreaサーバでPHP5が使えるなどの特長がある。

.htaccessファイルと、いくつかのPHPファイルを修正する。

.htaccessファイル修正

まず、ルートにある.htaccessに以下を付け足す。

AddHandler application/x-httpd-php5cgi .php
<Files ~ "^(doku|feed|css|fetch)\.php$">
AddHandler cgi-script .php
</Files>

BatchEditプラグインなどPHP5専用のプラグインがある事もあわせ、PHP5で動かす方がよい。

なお、AddHandler application/x-httpd-php5cgi .phpだけでセーフモード対策すると、各PHPスクリプトのヘッダ出力を無視してヘッダがtext/htmlで固定されるため、

  • Firefoxでサイトを見ると、CSSが解釈されず、JavaScriptが動かず、RSSがパースエラーを起こし、プラグイン更新で更新完了しなくなったりする。
  • ドコモ対策をしたサイトが、XHTMLにならずCSSが解釈されない。1)

といった問題が起こる。

css.php、doku.php、feed.php、fetch.php修正

さらに、以下のファイルを修正する。

  • css.php……CSS生成。
  • doku.php……ページ表示など。
  • feed.php……フィード。
  • fetch.php……画像取り込み。対策しなくても一応画像表示される事は多いが、少々不安定になる。
  1. 各ファイルの1行目に「#!/usr/local/bin/php5」を入れる
  2. パーミッションを755にする

なお、AddHandler application/x-httpd-php5cgi .phpを使わずこれらのファイルだけでセーフモード対策をすると、突然管理画面に入れなくなるなどの問題が起こる。

次は、設定全般の見直し

ある程度まともに動くようになったら、大まかな設定をしていく。DokuWikiの設定へ。

1) ただし、携帯で利用しやすいかと言うと、かなり疑問。ヘッダ出力、文字コード、インラインCSS化、専用テンプレート、プラグイン改変(十分に横幅があるのを想定している・携帯非対応のプロパティを使っているプラグインがかなりある)といった手間をかけるなら、最初から携帯に特化したシステムを使う方がよいのではと…
 
dokuwiki/config/safemodehack.txt · 最終更新: 2009/05/03 23:32 by admin
 
特に明示されていない限り、本Wikiの内容は次のライセンスに従います:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki