簡體   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