我想隐藏下载文件夹的位置,以便用户下载文件时看不到该位置。我认为这可以使用 .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
只有该脚本需要知道下载文件夹的真实位置。