Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在根目录下存储文件_Php_Security_File_Download_Document - Fatal编程技术网

Php 在根目录下存储文件

Php 在根目录下存储文件,php,security,file,download,document,Php,Security,File,Download,Document,从我以前在这里的讨论中,我消除了这样一个事实:如果将文件放在根目录下,它们是安全的。我和替我处理这件事的人谈过,他说,如果我们阻止公众访问,那么上传内容的用户就不能下载或查看他们的文件。给你一个我想做的例子: 如果我,一个网站的成员上传到我的帐户一个word文件,那么我应该能够回来下载它。但是,由于文件夹阻止访问,那么如何下载文件呢?请注意,要使其可下载的文件应存储在根目录中或“之后”。通常,您不希望其他人直接访问的文件应该存储在根目录下。这是因为如果您只需要包含这些文件,您可以轻松地返回根目录

从我以前在这里的讨论中,我消除了这样一个事实:如果将文件放在根目录下,它们是安全的。我和替我处理这件事的人谈过,他说,如果我们阻止公众访问,那么上传内容的用户就不能下载或查看他们的文件。给你一个我想做的例子:


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

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


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

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


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

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

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

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

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

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

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

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

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

请elaborte,您在根目录或之后是什么意思?我是新来的,请解释一下。thanksOr用符号链接到,然后告诉apache请elaborte,你在根中或之后是什么意思?我是新来的,请解释一下。感谢或使用符号链接链接到,然后告诉apache to如果您的意思是在webroot之上,那么是的,它们是“安全的”,因为它们不能由最终用户寻址。如果您的意思是在webroot之上,那么是的,它们是“安全的”,因为它们不能由最终用户寻址。良好完整的写操作+1(使用modxsendfile确实是apache的一个不错的解决方案)。但是,您应该注意到,第一种方法可能不适用于具有open_basedir限制的主机…@wimvds:在几乎所有具有open_basedir限制的共享主机上,受限制的目录实际上是公共文档根上的一个目录。在这种情况下,它通常会起作用(因为用户无法在open_basedir中指定的目录之外的任何位置上载文件)。在AAA的情况下,它几乎可以保证工作。他的.PHP可以编写文件的任何地方,
readfile
都可以读取它,因为两者都使用相同的open_basedir。@AAA:您也需要用PHP手动执行该操作。例如,通过处理
glob
的输出@Sander:我看到一些主机将open_basedir设置为.In我的时间到了,但你当然是对的,当它配置正确时它会工作,如果他能够写入到那个位置,它肯定会工作。@wimvds:Ouch.
的open_basedir是非常,呃…邪恶的。如果我遇到这样的情况,我会立即转移到另一个主机:-)-1以获得良好和完整的写入效果(使用modxsendfile确实是apache的一个不错的解决方案)。但是,您应该注意到,第一种方法可能不适用于具有open_basedir限制的主机…@wimvds:在几乎所有具有open_basedir限制的共享主机上,受限制的目录实际上是公共文档根上的一个目录。在这种情况下,它通常会起作用(因为用户无法在open_basedir中指定的目录之外的任何位置上载文件).在AAA的情况下,它几乎可以保证工作。他的.PHP可以在任何地方编写文件,
readfile
都可以读取它,因为两者都使用相同的open_basedir。@AAA:您也需要使用PHP手动执行此操作。例如,通过processin