PHP根据新文件的位置

时间:2017-08-30 18:40:03

标签: php file-permissions

我正在尝试使用PHP在我首选文件夹的子文件夹中创建一个文件。

我使用以下命令:

file_put_contents("/preferred_folder/subfolder/test_A.txt", "test_A");

我收到以下错误消息:

Warning: file_put_contents(preferred_folder/subfolder/test_A.txt): failed to open stream: Permission denied in /users/service/dummy_username/code.php on line ###.

我通过PuTTY使用以下命令检查了/ preferred_folder / subfolder /的权限,我以" dummy_username"的身份登录,并收到以下响应:

$ ls -l /preferred_folder/
drwxrwxr-x   7 1234567 1000001   120 Apr 30 13:35 subfolder

为"其他用户"写入权限未启用,这是预期的。另一方面,我不认识这个用户或小组,所以我检查了:

$ groups 1000001
groups: 1000001: No such user

此外," getent passwds 1234567"不会返回任何值(并且它成功地为" dummy_username")。这里奇怪的地方;我尝试在另外两个位置创建一个文件作为完整性检查:第一个文件具有对#34;其他用户的写入权限"第二个是我的脚本在过去几年里成功创建文件的地方。

file_put_contents("/preferred_folder/test_B.txt", "test_B");
file_put_contents("/users/service/dummy_username/test_C.txt", "test_C");

在这些情况下,两个文件都已成功创建,但文件的用户和组不同:

$ ls -l /preferred_folder/test_B.txt
-rw-r--r-- 1 ABCDEFG root 5 Aug 30 08:39 /preferred_folder/test_B.txt

$ ls -l /users/service/dummy_username/test_C.txt
-rw-r--r-- 1 dummy_username dummy_group 5 Aug 30 08:39 test_C.txt

我还有几个问题:

1)为什么从此脚本创建的文件的用户和组仅基于文件位置而不同?我希望它们都归" dummy_username"。

所有

2)用户是什么/谁" ABCDEFG"?我已经验证了" root"小组没有明确包含这样的用户。

3)什么/谁是小组" 1000001"为什么用户" 1234567"还不知道是该组的一部分吗?

4)最后,除了chmod 777整个preferred_folder及其多个级别的子文件夹外,是否有适当的建议方法授予我的" dummy_username"用于创建目标文件?

提前感谢您的帮助。长期访客;第三次海报。

1 个答案:

答案 0 :(得分:0)

您获得权限被拒绝的原因是因为在Web服务器上运行PHP的用户无权写入该目录。

在许多nginx / apache配置中,Web服务器设置为允许用户www-data访问/var/www/html。您的Web应用程序的根目录。

在此目录之外写入将导致权限错误。

除非您正在为终端编写脚本,否则PHP有权访问/var/www/html以外的目录的原因很少。

如果你在终端上运行PHP,你可以sudo,或者创建一个有权从该目录读/写并且用该用户运行脚本的用户。