私はこれで一日中頭を揚げました。目がかゆくなるまで SO を調べています...知っておく必要があります: サイトのルート外にあるファイルにアクセスするにはどうすればよいですか?
背景: Linux を実行する Apache 2.0 専用サーバー。
コード: PHP および MySQL
理由: ファイル パスとファイル名をブラウザに入力しないようにファイルを保護したい。
これはそれほど難しいことではありません...しかし、私の分裂した頭は別のことを言います. どんな助けでも大歓迎です。
多かれ少なかれ同じことをしているように見えるこの質問への答えを見てください。
簡単な要約:readfile()
またはfile_get_contents()
あなたが求めているものです。この例は次のreadfile()
ページからのものです。
<?php
$file = 'monkey.gif';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>
$file
ユーザー入力を使用して変数を設定できるようにすることはお勧めしません。応答でファイルを任意に返す前に、ファイル名がどこから来ているかを考えてください。
サイトルート外のファイルにアクセスしようとしていますか? 次に、このリンクを stackoverflowで確認できます。これはApacheの公式ドキュメントです。
それ以外の場合は、他のユーザーがサイト ルート外のファイルにアクセスするのを防ぐために特別な処理を行う必要はありません。