2017-02-04 7 views
0

内からのgitコマンドを実行している私は、ファイルのアップロードフォームを持っているし、ファイルのアップロード後に私が実行してGitHubにまでファイルをプッシュする:は、PHPスクリプト

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'); 

これらのコマンドはエラーは発生しませんが、どちらも動作しません。 ssh鍵を使用するには、apacheユーザにアクセス権を与える必要がありますか?私が推測する

+0

お使いのOSは? – C2486

+0

[PHP GitHub API](https://github.com/KnpLabs/php-github-api)を見ましたか? – infinigrove

+0

CentOS - はい私はそのライブラリを見ましたが、私はCodeIgniter 3を使用していて、コンポーザーを使用していないので、実装方法がわかりませんでした。 – poptartgun

答えて

0

は、パーミッションの問題である、あなたは、exec()を使用し、$出力

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

私はこれを実行しました:$ your_command = 'cd /var/www/vhost/xxx.com/httpdocs/clients/portal/upoads/54 &&/usr/bin/git status'; exec($ your_command。 '2>&1'、$ output、$ return_var); var_dump($ output); – poptartgun

+0

私はこれを持っています:array(0){} – poptartgun

+0

あなたのコマンドを実行するだけで入手できます:cd /var/www/vhost/xxx.com/httpdocs/clients/portal/upoads/54 &&/usr/bin/git status – suibber

0

Do I need to grant access to the apache user to use the ssh key?

はいによってエラー情報を取得することができます。

これはコピーの鍵で、apacheユーザーが読むことができることを意味します。 SSHは、ユーザーがキーファイルを読み取ることができない場合(つまり、キーファイルのアクセス許可が0600)、動作しません。

コピーのようなキー:

また
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 ...') 
+0

私はまだエラーが発生しています: "メッセージ:ホストキーの確認に失敗しました。致命的:リモートリポジトリから読み取れませんでした。正しいアクセス権があり、リポジトリが存在することを確認してください。" – poptartgun

+0

git remote -vは正確なrepoを表示します – poptartgun

+0

Grisha、PHPスクリプトの中でexec( 'whoami')を実行すると 'opcode'が表示され、cat/etc/passwdのときはopcodeのホームディレクトリは/ var/wwwです/vhost/xxx.comので、私はそこに.sshディレクトリを作成し、ファイルを移動し、あなたが提案したアクセス許可を適用した、私はオペコードにchowned:psaclnスクリプトと一致する...運がいいえ。 – poptartgun

0

私はそれを解決しました。私はこのすべてをrootユーザーとして実行しました。私のPHPスクリプト内

私はそのスクリプトを実行しているユーザーを取得するために

exec("whoami"); 

を走りました。それから私は、私は私のウェブサーバ(CentOSに7)上のすべての私のWebファイルということに気づいているユーザー(/var/www/vhost/mydomain.com)

のホームディレクトリを取得するために

cat /etc/passwd 

を走りましたオペコードとしてchown'dた: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 

、私は、コマンドラインで自分のサーバーにログインすると、初期には、私はそれを上書きコピーする前に、それは、私のknown_hostsファイルに追加されますするために、レポにコミットんでした。これが誰かを助けることを望みます。