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