「ログインした」ユーザーのみが利用できるようにする必要があるファイルを保護しようとしていると思います...サイトに埋め込まれたファイルをダウンロードするのを止めようとしているだけなら、本当にあなたができることは何もありません。
したがって、承認されたユーザーにのみファイル アクセス/ダウンロードを許可しようとしているという前提で操作する場合、最善の策は、php
コントローラー ファイルを介して保護されたコンテンツのみを提供することです (それを と呼びましょうserve_file.php
)。実際のファイルをパブリック ルート ディレクトリ (またはその他のアクセスできないフォルダー) の外に保存するか、ファイルをBLOB
データとしてMySQL
テーブルに保存します。
次に、ユーザーがファイルをダウンロードしたい場合、取得しようとしているファイルを識別するデータserve_file.php
へのリンクが提供されます。_GET
http://mysite.com/serve_file.php?file_id=24
、 例えば。
serve_file.php
スクリプトはデータを取得し、それ_GET
が示しているファイルを特定し、権限テーブルをチェックして (または、ユーザーがログインしているかどうかを確認するだけで)、ユーザーがファイルを受け取る資格があるかどうかを判断します。そうであれば、(MySQL から、または を使用して) ファイル データを取得し、(提供しているファイルの種類に応じfile_get_content()
て) 適切な情報を吐き出し、コンテンツを/ s します。headers
print
echo
//check that the user is logged in (I'm assuming you have a function of this name)
if (!user_logged_in()){
die('You do not have permission! Please log in');
}
/*see what file the user is trying to get...
this is a very simple sample that can only get PDFs.
You should probably have a table with file details*/
$file_location = $_SERVER['DOCUMENT_ROOT'].'/../protected_files/file_'.intval($_GET['file_id']).'.pdf'
if (!is_file($file_location)){
die('Could not get that file!');
}
$content = file_get_contents($file_location);
header("Content-Type: application/pdf");
header("Content-Length: ".strlen($content));
//add some more headers here, to deal with caching, etc
echo $content;
die();
設定したs は、ユーザーのブラウザに、送信してheader
いるデータをどのように解釈するか (たとえば、Content-Type: application/pdf
脚本。