从PHP脚本中运行git命令

时间:2017-02-04 02:46:13

标签: php git

我有一个文件上传表单,在文件上传后我想通过运行将文件推送到GitHub:

git add .
git commit -m "some message"
git push origin master

我该如何解决这个问题?我见过使用exec()的例子,但这让我很紧张。

shell_exec('cd /var/www/vhost/xxx.com/httpdocs/clients/portal/upoads/54 && /usr/bin/git add -A');
shell_exec('cd /var/www/vhost/xxx.com/httpdocs/clients/portal/upoads/54 && /usr/bin/git commit -m "something 1"');
shell_exec('cd /var/www/vhost/xxx.com/httpdocs/clients/portal/upoads/54 && /usr/bin/git push origin master');

这些命令不会出错但是也不起作用。我是否需要授予apache用户访问权限才能使用ssh密钥?

3 个答案:

答案 0 :(得分:0)

我猜是权限问题,你可以使用exec(),并通过$ output

获取错误信息
exec($your_command.' 2>&1', $output, $return_var);
var_dump($output);

答案 1 :(得分:0)

  

我是否需要授予apache用户访问权限才能使用ssh密钥?

这意味着您必须复制apache用户可以阅读的密钥。除非密钥文件只能由用户读取(即密钥文件的0600权限),否则SSH无法工作。

复制密钥,如:

mkdir -p --mode=0700 ~apache/.ssh    
cp /my/id_rsa ~apache/.ssh/id_rsa
chown -R apache:apache ~apache/.ssh/id_rsa
chmod 0600 ~apache/.ssh/id_rsa

此外,每次要运行命令时都不需要cd。使用GIT_DIR

putenv('GIT_DIR=/path/to/git/repo')
shell_exec('git commit ...')

答案 2 :(得分:0)

我解决了。我以root用户身份运行了所有这些。

在我的PHP脚本中,我跑了

exec("whoami"); 

获取正在运行该脚本的用户。然后我跑了

cat /etc/passwd

获取该用户的主目录(/var/www/vhost/mydomain.com)

我注意到在我的网络服务器(Centos 7)上我的所有网络文件都被称为操作码:psacln所以我在操作码的主文件夹中创建了一个.ssh目录:

mkdir -p --mode=0700 /var/www/vhost/mydomain.com/.ssh  
cd (back to root)  
cp .ssh/id_rsa /var/www/vhost/mydomain.com/.ssh/id_rsa
chown -R opcode:psacln /var/www/vhost/mydomain.com/.ssh/id_rsa
chmod 0600 /var/www/vhost/mydomain.com/.ssh/id_rsa

我缺少的是我必须移动我的known_hosts文件,因为我使用的脚本没有添加到它。

cp .ssh/known_hosts /var/www/vhost/mydomain.com/.ssh/known_hosts
chmod 0600 /var/www/vhost/mydomain.com/.ssh/known_hosts

当然,我必须在命令行登录我的服务器并对repo进行初始提交,以便在将其复制之前将其添加到我的known_hosts文件中。希望这有助于某人。