在根目录下存储文件

时间:2011-04-20 11:55:18

标签: php security file download document

从我之前的讨论开始,我拿走了文件是安全的,如果你把它们放在根目录下。我跟那个为我处理这个问题的人说过,他说如果我们阻止公共访问,那么上传内容的用户就无法下载或查看他们的文件。给你一个我想要做的例子:

如果我,该网站的一名成员上传一个word文件到我的帐户,那么我应该能够回来下载它。但由于该文件夹阻止访问,如何下载该文件?

3 个答案:

答案 0 :(得分:2)

通常,您希望可下载的文件应位于文档根目录内或其中较深的位置。但是,如果您只想在某些时候使文件可下载(例如,您希望首先检查用户凭据,或计算数据库中的下载次数),则可以编写下载脚本。最简单的形式是:

<?php
header('Content-Disposition: attachment;filename=hello.txt');
readfile('/path/to/file.txt');
?>

请注意,使用名为xsendfile的特殊Apache模块有更好的方法。有了这个,你可以这样做:

<?php
header('Content-Disposition: attachment;filename=hello.txt');
header('X-Sendfile: /path/to/file.txt');
?>

Apache会看到第二个标题,剥离它并发送file.txt的内容。好消息是您的资源密集型PHP脚本已经停止,您将不会遇到任何类型的PHP时间或内存限制。

答案 1 :(得分:1)

您想要下载的文件应该存储在根目录或“之后”。通常,您不希望其他人直接访问的文件应存储在根目录下。这是因为如果您需要包含这些文件,您可以轻松返回根目录并使用include()require()获取这些文件,而用户会隐藏它们,因为您的地址将显示为www.site.com/index.php

必须公开且需要公开访问的文件(例如:下载)不能存储在根目录下。

答案 2 :(得分:1)

您可以直接从PHP脚本将文件传递给用户。您需要fpassthru功能。但这种解决方案并不完美,会导致问题。我更喜欢让你的文件可以下载到某个公共访问目录(文件根目录或子目录中的某个地方)。或者你可以从子域服务它们(甚至更好)。

相关问题