繁体   English   中英

从PHP脚本中运行git命令

[英]Running git commands from within a PHP script

我有一个文件上传表单,文件上传后,我想通过运行以下命令将文件推送到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密钥?

我想是权限问题,您可以使用exec(),并通过$ output获取错误信息

exec($your_command.' 2>&1', $output, $return_var);
var_dump($output);

我是否需要授予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 ...')

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

在我的PHP脚本中运行

exec("whoami"); 

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

cat /etc/passwd

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

我注意到在我的Web服务器(Centos 7)上,我所有的Web文件都被修改为opcode:psacln,因此我在opcode的主文件夹中创建了一个.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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM