如何让PHP对git创建的某些目录进行写访问


How to give PHP write access to certain directories created by git?

这里有几个类似的问题,比如这个问题,但这个问题(以及我读到的其他几个问题)的答案是:

首先让PHP自己创建目录。

我在我的网站上使用git,所以不可能允许PHP"自己创建目录"

为了获取更改,我在通过SSH登录到服务器时运行git pull origin master命令,这使文件的所有者成为我登录的cpanel用户。

我需要PHP能够在某些目录中创建文件。允许chmod的唯一方法是将文件夹777,还是有更好的方法?

我对Linux权限没有很好的理解,但从我所读到的内容来看,将目录和文件权限更改为777通常不是一个好主意。此外,如果我将文件夹chmod 777,我怀疑在运行git pull origin master时权限会被覆盖,尽管我还没有测试过这一点。

  1. Git不会覆盖现有目录的权限
  2. 您应该检查user apache(或您使用的任何http服务器)在运行什么

apache:可能是www-data

ps aux | grep http | cut -f 1 -d ' '
  1. 一旦你知道用户,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