如何使用php阻止文件的公共下载?

时间:2010-02-26 05:19:42

标签: php authentication authorization download

我有一个脚本,只允许授权用户将文件上传到某个文件夹。

但是我不知道如何在没有登录的情况下阻止人们自由下载。

我需要php中的解决方案。

我已经google了一下,但还没有直截了当。

目前在我的文档根目录中,我有一个名为admin的文件夹和一个名为uploads的子文件夹。因此只有管理员角色才能上传。编辑和管理员都可以下载。在这种情况下我该怎么做?

请告知。

3 个答案:

答案 0 :(得分:13)

将文件放在公共webroot目录之外的某个位置,或将服务器配置为不提供文件。只要您的服务器能够愉快地使用有效的URL提供服务,您就无法使用PHP来防止这种情况发生。


如果您的文件位于/public_html/文件夹中,请将其从该文件夹中取出并放入例如/secret_files/,所以你的目录结构如下所示:

public_html/
    index.html
    admin/
        admin_index.php
secret_files/
    my_secret_file.txt

网络服务器仅配置为提供/public_html/目录中的文件,因此没有人可以访问之外的目录(技术术语上面)。< / p>

要仍然允许某人下载这些文件,请按照cletus建议并使用readfile通过PHP脚本“手动”提供文件。 PHP仍然可以访问文件系统的这些其他部分,因此您可以将其用作网守。

答案 1 :(得分:9)

不要将文件存储在文档根目录下的目录中。

而是将它们移动到其他地方,然后PHP脚本可以通过编程方式确定是否有人可以下载它们,然后使用readfile()或类似的东西将它们流式传输给用户。

您还可以将Web服务器配置为不提供此目录中的文件,但无论如何您都需要PHP来提供它们。只是不把它们放在文档根目录下更清洁。

答案 2 :(得分:5)

回答有关如何使用PHP进行密码保护的问题: This应该可以解决您的问题。