我有一个 PHP 文件,hook.php
看起来像这样:
<?php
`cd .. && git pull`;
该文件位于/var/www/oliverash.me/site/
. 但是,需要拉取的 git 仓库是/var/www/oliverash.me/
. ./site
是 Apache 将其视为文档根目录的文件夹。
当我在浏览器中运行该文件时,它似乎并没有拉取存储库。
我也尝试过回显结果,但页面是空白的。
<?php
echo `cd .. && git pull`;
我不能发表评论来回复你,但我假设你正在运行一个 *nix 系统。如果您的 apache/php 守护进程没有访问权限,您将获得权限被拒绝.git/
。.git/
您可以递归地更改目录的所有者/组。或者做一个chmod -R o+rw .git/*
给每个人(即不是所有者,不是组)在 git 目录中读写的权限,这应该清除你得到的权限错误。
编辑 只需重新阅读问题,因此可能不需要以下内容,但以防万一。
但是,这样做,您需要记住,任何有权访问您的服务器的人都可以通过http://myurl/.git/
etc 访问这些服务器。因此,作为安全预防措施,我会添加一个.htaccess
文件,例如:
order deny, allow
deny from all
在.git
目录中,这样 apache 将拒绝从 Web 浏览器访问其中的所有内容。
你肯定有一个权限问题,也许是几个。
Host
是远程的,一个User
用于登录的,一个Identity
是远程允许 ssh 进入并执行拉取的私钥的路径。在根目录或您可以访问它的任何地方创建 webhook.php
$result = exec("cd /path/to/repo && git pull origin branch");
确保权限是 775 并且您的文件的用户和您的站点目录是 www-data 所有者
您在这里执行命令的用户有问题。
根据您的各种评论,系统命令以名为 apache
(homedir is /var/www
) 的用户身份执行。whoami
您可以通过在 PHP 脚本中运行命令来验证这一点:
<?php echo `whoami`;
该用户apache
通常是您的网络服务器在其下运行的用户,然后运行 PHP,然后运行 shell 命令。
显然您想以其他用户的身份运行该命令,但到目前为止您还没有共享哪一个用户的信息。
在正确的用户下运行 shell 命令,问题应该会消失。
在 linux 系统上,在不同用户下运行其他命令的命令称为sudo
另一个su
:
或者,您可以使用 suexec 在与 webserver 用户不同的用户下执行 PHP。
在任何情况下,您都需要确保您有一个能够执行 git 命令的用户。我不知道你是如何自己测试的,我知道的最好方法是 ssh 进入服务器,手动执行 git pull 并收集所需的数据,如用户名、主目录等。