Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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
如何使644个权限文件可从PHP写入?_Php_Apache_Permissions - Fatal编程技术网

如何使644个权限文件可从PHP写入?

如何使644个权限文件可从PHP写入?,php,apache,permissions,Php,Apache,Permissions,我在ApacheWeb服务器上使用PHP,但PHP缺乏写入权限,无法创建新文件或修改现有文件,尽管需要修改的文件设置为通常的644(文件夹为755) 我的第一个猜测是,问题出在PHP以不同于文件所有者的用户身份运行,通过运行“posix_getpwuid(posix_geteuid());”我发现PHP以“www data”的形式运行,而文件的所有者和组被设置为“company123”。所以,也许我应该简单地将文件的所有者更改为“www数据” 但后来我决定检查一些我一直在使用的其他web服务器。

我在ApacheWeb服务器上使用PHP,但PHP缺乏写入权限,无法创建新文件或修改现有文件,尽管需要修改的文件设置为通常的644(文件夹为755)

我的第一个猜测是,问题出在PHP以不同于文件所有者的用户身份运行,通过运行“posix_getpwuid(posix_geteuid());”我发现PHP以“www data”的形式运行,而文件的所有者和组被设置为“company123”。所以,也许我应该简单地将文件的所有者更改为“www数据”

但后来我决定检查一些我一直在使用的其他web服务器。在第一次尝试中,我使用PHP创建或修改644个文件没有问题,但是,所有者和组名为“600”,而PHP以用户“wse253421”的身份运行。显然,PHP可以作为一个用户运行,并写入另一个用户拥有的644个文件。这是怎么回事


这里发生了什么,对于第一台服务器上没有写入权限的PHP,我该怎么办?

644是对所有者的读/写权限,以及对组和世界的只读权限。因此,如果该文件不属于运行web服务器的同一用户,PHP将无法写入该文件,而不考虑组。如果(如您所说)它似乎在这样做,那么web服务器用户就是文件所有者的别名,即他们共享相同的uid

对于组写入,文件需要为664,并且组需要与Web服务器运行时的组相同(通常为www数据,但不保证!)。如果文件属于不同的组,664将不会有帮助。666可以,但不推荐使用,因为它允许任何人写入该文件

要创建新文件,目录上的权限是重要因素。755为所有者读/写/执行,为组和世界读/执行。如果要进行组写入,则需要775,而且该组必须与运行Web服务器的组相同

编辑: 如果需要临时检查Web服务器用户/组,请将目录修改为777并让其写入文件。然后检查文件所有者和组。只是别忘了把它调回一个更安全的设置

第一台服务器的最佳解决方案可能是chgrp需要写入的文件和目录,chmod文件到664,chmod目录到775


另请参见此处Thomas Rutter的答案:

您还可以创建一个文件夹并允许“写入”文件夹权限,如果没有,请在google中键入权限文件php。您将找到答案。我已经花了数小时在web上搜索答案。“允许‘写入’文件夹权限”是什么意思?该文件夹已具有通常的755权限。我需要更改的文件具有644权限,但将其更改为664没有任何区别。从我看到的情况来看,权限与另一台服务器上的权限相同,在这台服务器上运行良好。那么,您建议我做些什么更改呢?“因此,如果该文件不是由运行web服务器的同一用户所有,PHP将无法对其进行写入,而不管是哪个组”。那么为什么我可以写入另一台服务器上的(644权限)文件,其中用户是“wse253421”,文件所有者名为“600”?我怀疑600是wse253421的别名,即它们共享相同的UID谢谢!事实证明是这样的。我不知道UID和别名。您知道PHP作为一个用户运行而另一个用户拥有文件(出于安全原因,是故意的)是不是很常见,或者这可能是一个错误吗?我认为Apache服务器作为别名比较常见,是的,但是如果我不清楚的话,我找不到支持atmExcuse me的参考。我的意思不是“使用别名很常见吗?”,我的意思是“不让PHP写入web服务器很常见吗?”。无论何时我购买了web主机,我都可以使用PHP向服务器写入内容,但也许公司出于安全原因通常不允许在自己的网站上使用这种方式?