这里有几个类似的问题,比如这个问题,但这个问题(以及我读到的其他几个问题)的答案是:
首先让PHP自己创建目录。
我在我的网站上使用git
,所以不可能允许PHP"自己创建目录"
为了获取更改,我在通过SSH登录到服务器时运行git pull origin master
命令,这使文件的所有者成为我登录的cpanel用户。
我需要PHP能够在某些目录中创建文件。允许chmod
的唯一方法是将文件夹777
,还是有更好的方法?
我对Linux权限没有很好的理解,但从我所读到的内容来看,将目录和文件权限更改为777
通常不是一个好主意。此外,如果我将文件夹chmod
777
,我怀疑在运行git pull origin master
时权限会被覆盖,尽管我还没有测试过这一点。
- Git不会覆盖现有目录的权限
- 您应该检查
user
apache(或您使用的任何http服务器)在运行什么
apache:可能是www-data
ps aux | grep http | cut -f 1 -d ' '
- 一旦你知道用户,https服务器正在运行,请更改所有者
这个shell命令很好:
chown -R www-data FOLDER_PHP_NEEDS_TO_WRITE_TO
上面将文件夹的所有者设置为www-data
,显然为https服务器提供了写入权限。
无论您是否害怕失去对该目录的控制,都可以通过group
权限进行操作:
chgrp -R www-data FOLDER_PHP_NEEDS_TO_WRITE_TO
chmod -R g+w FOLDER_PHP_NEEDS_TO_WRITE_TO
现在您仍然是所有者,而http服务器能够在那里进行写入,因为它属于这个组。您可以使用其他方式,将自己添加到www-data
组,并将该组的写入权限授予所需的文件夹。
另一个选项是将git
作为www-data
:运行
sudo runuser -l www-data -c 'git pull'
但我建议大家一起解决。
这可能是你可以使用的东西-我自己还没有尝试过,所以我不知道它是否真的有效:
https://stackoverflow.com/a/3208143/609855