ファイルが現在の作業ディレクトリにある場合(これからはこれをcwdと略記します)、例は問題なく機能するはずです(EDIT 2に従って前の例を再度削除しました)。
編集
申し訳ありませんが、私は何を考えていました。file_exists()
もちろん、ファイルへのフルパスを指定する必要があるため、この例は機能しません。したがって、ディレクトリからファイルをプルするディレクトリをファイルの前に追加します。それでもなお、サナタイズやホワイトリストなどに関する私の警告は重要です。
編集終了
編集2
うわー、すみません、私は大騒ぎしています。file_exists()
相対パスで問題なく動作するはずです。ただし、ドキュメントを見ると、セーフモードの制限について警告されています。多分これらはあなたの状況に当てはまります、私にはわかりません。
編集終了2
でcwdとは何かをテストできますgetcwd()
。通常の状況では、cwdはアプリケーションのエントリポイントと同じです。したがって、たとえば/usr/www/your_site_root/index.php
がエントリポイントの場合、/usr/www/your_site_root/
はcwdです。
そのため、例とともに含めようとするファイルは、上記のディレクトリに存在する必要があります。
アドバイスの言葉:
あなたはすでにこれを知っているかもしれませんが、あなたの例はあまり安全ではありません。ユーザーからの入力をサニタイズすることはありません($_GET[ 'file' ]
この場合)。このようにして、訪問者はあらゆる種類のphpファイルを含めて望ましくない結果をもたらすことができます。
そのため、フェッチが許可されているファイルのホワイトリストを保持することをお勧めします。何かのようなもの:
<?php
$whiteList = array(
'dude',
'chick',
'mom'
);
// and just to be safe, you should probably strip stuff like ../ etc. here too.
$requestedFileBaseName = $_GET[ 'file' ];
if( !in_array( $requestedFileBaseName, $whileList ) )
{
include( '404.php' );
}
else
{
include( $requestedFileBaseName . '.php' );
}