ユーザーがファイルをダウンロードしたときに場所が見えないように、ダウンロード フォルダーの場所を非表示にしたいと考えています。これは .htaccess ファイルを使用して実行できると思いますが、どうすればよいですか? あるいは、これを PHP でどのように行うことができますか?
3 に答える
これは私がPHPで行う方法です:
<?php
$fakeFileName= "fakeFileName.zip";
$realFileName = "realFileName.zip";
$file = "downloadFolder/".$realFileName;
$fp = fopen($file, 'rb');
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$fakeFileName");
header("Content-Length: " . filesize($file));
fpassthru($fp);
?>
さらに、誰にもファイルの場所にアクセスさせたくない場合は、次の名前のファイル.htaccess
をコンテンツのみを含むダウンロード フォルダーに入れます。
deny from all
コードを少し変更しました。最初に、偽のファイル名と実際のファイル名について説明します。偽のファイル名は、ダウンローダーがファイルをダウンロードする際の名前です。実際のファイル名は、サーバーのダウンロード フォルダーにある実際のファイルの名前です。
また、ユーザーがログインしていて、ファイルをダウンロードできることを確認します。彼がファイルをダウンロードすることを選択した場合、PHP ファイルが新しいタブで呼び出され (上記のダウンロード コードを使用)、ファイルの最後に次の行があります。
exit;
そのため、ダウンロード リンクをクリックすると、空白のページが新しいタブにすばやくポップアップ表示され、すぐに終了してダウンロードが開始されます。
編集:ダウンロード リンクは次のようになります。
<a href="simpleDown.php?id=<?php echo $_GET['id']; ?>" target="_blank">Download!</a>
データベース内のダウンロードの はどこid
にあり、上記のダウンロード スクリプトでは、それを含むエントリを見つけて、実際のファイル名と偽のファイル名を取得します。ただし、データベースがなくてもこれを行うことができます。id
id
おそらく、Mod Rewriteを調べるか、PHPスクリプトをfile.php?f=someHash
使用して、オクテットストリームに移動し、それを使用してユーザーにファイルのダウンロードを強制することで、ファイルにアクセスできるようにします。
あなたがしたいことは、ユーザーに指示されてからfake_url.php
、そのURLを別のファイルに書き直すことです- real_url.php
。real_url.php
これにより、ユーザーはファイルでリダイレクトが発生していることに気付かないため、が効果的に非表示になり.htaccess
ます。
RewriteRule fake_url.php(.*)$ real_url.php?$1 [L,QSA]
ではreal_url.php
、リダイレクトを介して渡されたパラメータを読み取り、次のようなものを使用してreadFile()
、内部から適切なファイルをユーザーに送り返すことができます。real_url.php
したがって、ユーザーにはURLのみが表示されます-
https://my-secret-site/download.php?file=file_to_download
そして、パラメータreal_url.php
を調べることで、どのファイルが要求されたかがわかります。$_GET['file']
ユーザーがダウンロードしているファイルの実際の場所は、もはや重要ではありません。ただし、すべてのダウンロードは実行fake_url.php
され、そのスクリプトのみがダウンロードフォルダーの実際の場所を知る必要があります。