14

ユーザーがファイルをダウンロードしたときに場所が見えないように、ダウンロード フォルダーの場所を非表示にしたいと考えています。これは .htaccess ファイルを使用して実行できると思いますが、どうすればよいですか? あるいは、これを PHP でどのように行うことができますか?

4

3 に答える 3

26

これは私が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にあり、上記のダウンロード スクリプトでは、それを含むエントリを見つけて、実際のファイル名と偽のファイル名を取得します。ただし、データベースがなくてもこれを行うことができます。idid

于 2012-06-12T13:27:31.603 に答える
5

おそらく、Mod Rewriteを調べるか、PHPスクリプトをfile.php?f=someHash使用して、オクテットストリームに移動し、それを使用してユーザーにファイルのダウンロードを強制することで、ファイルにアクセスできるようにします。

于 2012-06-12T13:19:31.763 に答える
2

あなたがしたいことは、ユーザーに指示されてからfake_url.php、そのURLを別のファイルに書き直すことです- real_url.phpreal_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され、そのスクリプトのみがダウンロードフォルダーの実際の場所を知る必要があります。

于 2012-06-12T13:22:19.953 に答える