Web サーバー上のドキュメントディレクトリに スクリプトや実行ファイルのようなアクティブな内容を読み込むのは、 往々にして危険な行為であるとみなされることがあります。 何らかの設定ミスによりスクリプトが実行されず、通常の HTML ドキュメント として表示されてしまう場合には、知的著作物またはパスワードのような セキュリティ情報が漏洩する可能性があります。 このため、多くのシステム管理者は、スクリプトを PHP CGI を通じてのみ アクセス可能な他のディレクトリ構造にセットアップしたいと思うこと でしょう。 この場合、常にインタープリタに処理されるため、上記のように表示されること はありません。
前節で記したようなリクエストがリダイレクトされたものでないことを 確かめる方法が利用可能でない場合、 スクリプト用の doc_root を Web ドキュメント用ルートとは別に セットアップする必要があります。
設定用命令 doc_root により
設定ファイル ファイル中で
PHP スクリプト用ドキュメントルートを設定することができます。
または、環境変数 PHP_DOCUMENT_ROOT でも設定する
ことができます。
これを設定した場合、CGI 版の PHP は、
常に開くファイルの名前をこの doc_root
リクエストのパス情報を用いて作成し、
(以下の user_dir
を除き、)確実に
このディレクトリの外側でスクリプトが実行されないようにします。
ここで利用可能な別のオプションは、user_dir です。user_dir が設定されていない場合、
開かれるファイル名を制御するのは、doc_root
のみです。
http://my.host/~user/doc.php のような
URL は、ユーザーホームディレクトリ以下のファイルを開かず、
doc_root 以下の ~user/doc.php
というファイルを開くことになります。
(ディレクトリ名がチルダ [~] で始まっている
ということになります)
user_dir が例えば、public_phpに 設定されていた場合、 http://my.host/~user/doc.php の ようなリクエストは、そのユーザー user のホームディレクトリにある public_php 以下の doc.php という名前のファイルをオープンしま す。ユーザーのホームディレクトリが、 /home/user である場合、 実行されるファイルは、 /home/user/public_php/doc.php となります。
user_dir
の展開は、
doc_root
の設定によらず行われます。
このため、ドキュメントルートおよびユーザーディレクトリへの
アクセスを別々に制御することができます。