我正在尝试使用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"用于创建目标文件?
提前感谢您的帮助。长期访客;第三次海报。
答案 0 :(得分:0)
您获得权限被拒绝的原因是因为在Web服务器上运行PHP的用户无权写入该目录。
在许多nginx / apache配置中,Web服务器设置为允许用户www-data
访问/var/www/html
。您的Web应用程序的根目录。
在此目录之外写入将导致权限错误。
除非您正在为终端编写脚本,否则PHP有权访问/var/www/html
以外的目录的原因很少。
如果你在终端上运行PHP,你可以sudo
,或者创建一个有权从该目录读/写并且用该用户运行脚本的用户。