如何隐藏实际的下载文件夹位置

时间:2012-06-12 13:17:29

标签: php .htaccess

我想隐藏下载文件夹位置,以便在用户下载文件时无法看到该位置。我认为这可以使用.htaccess文件完成,但我该怎么做?或者如何用PHP完成这个?

3 个答案:

答案 0 :(得分:24)

这就是我在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的条目,然后获取其真实文件名和假文件名。但是,您可以在没有数据库的情况下执行此操作。

答案 1 :(得分:4)

也许你想要查看Mod Rewrite,或者使用你的PHP脚本来访问文件,只需转到file.php?f=someHash,然后使用八位字节流强制用户下载文件。

答案 2 :(得分:2)

您要做的是让用户定向到fake_url.php,然后将该网址重写为其他文件 - real_url.php。这有效地将real_url.php呈现为隐藏,因为用户不知道.htaccess文件中发生的重定向。

RewriteRule fake_url.php(.*)$ real_url.php?$1 [L,QSA]

real_url.php中,您可以阅读通过重定向传递的参数,然后使用与readFile()类似的内容,将相应的文件从real_url.php

因此用户只会看到网址 -
https://my-secret-site/download.php?file=file_to_download

real_url.php中,您可以通过检查$_GET['file']参数来了解所请求的文件。

用户正在下载的文件的实际位置无关紧要。所有下载都是fake_url.php,只有该脚本需要知道下载文件夹的真实位置。