Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.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
apache可以从PHP写入但不提供文件的目录_Php_.htaccess_Unix_Permissions - Fatal编程技术网

apache可以从PHP写入但不提供文件的目录

apache可以从PHP写入但不提供文件的目录,php,.htaccess,unix,permissions,Php,.htaccess,Unix,Permissions,我需要在linux上的apache上使用php提供非共享上传 我可以很好地处理文件上传,并将它们移动到所需的文件夹。我想问的是,我怎样才能做到即使有人知道那个文件夹和文件名,他们也不能通过浏览器下载文件 换句话说,我需要apache能够将文件移动到文件夹中,但不能为该文件夹中的文件提供服务 php可以写入docroot之外的文件吗?我可以用htaccess做些什么吗?甚至只是linux目录权限 我正要创建一个空白index.html,并给文件一个包含长随机字符串的名称(使它们不可用),但我决定一

我需要在linux上的apache上使用php提供非共享上传

我可以很好地处理文件上传,并将它们移动到所需的文件夹。我想问的是,我怎样才能做到即使有人知道那个文件夹和文件名,他们也不能通过浏览器下载文件

换句话说,我需要apache能够将文件移动到文件夹中,但不能为该文件夹中的文件提供服务

php可以写入docroot之外的文件吗?我可以用htaccess做些什么吗?甚至只是linux目录权限

我正要创建一个空白index.html,并给文件一个包含长随机字符串的名称(使它们不可用),但我决定一定有更好的方法


谢谢大家。

在Apache DocumentRoot之外上传您的文件

(php文件所在的位置)


/var/www/uploads/

中上载您的文件并不是一个新问题——许多人(包括您的人)在某个时候发现他们的“上载”目录被各种文件交易商使用。。。幸运的是,解决方案很简单

您可以使Unix(我肯定,Windows也可以)文件和目录对于用户或组是可写的,但不可读。它有时被称为“负面权限”,一些被误导的个人(以及他们创建的脚本)会对这种设置皱眉,但这并没有什么问题

例如,这里有一个来自我的服务器的实际文件。我(“mi”)拥有它,而“www”组(httpd正在其下运行)可以写入它。但它无法从中读取。系统上的所有其他合法用户都可以读取它(您可能需要,也可能不需要):

上述设置的八进制模式(与chmod一起使用)为0624。你可以改变它以适应你的需要。例如,如果系统上没有其他用户能够访问该文件,那么您将使用0620


您还可以使用Apache的权限设置来阻止从目录提供服务,但这远不如Unix文件系统权限简单。这还意味着,如果您从Apache切换到其他web服务器,或者从Apache内部运行PHP切换到应用程序服务器,或者其他什么……

那么我是否正确地认为,即使www数据用户(Apache运行的用户)理论上有权访问该文件夹(根据linux权限),它无法读取该文件夹,因为它位于docroot之外?尽管PHP的行为更像是在shell中登录的用户,Apache将能够读取它(因此您将能够在PHP中使用该文件),但它们永远不会在外部提供,Apache将只向您的访问者提供documentRoot中的内容。
DocumentRoot /var/www/public/
-rw--w-r--  1 mi    www    ....  /home/mi/public_html/.../download.log