我创建了一个由one.com托管的网站,用于学校项目。我想向访问者显示某些信息(通过git log命令检索)。为此,我尝试使用PHP和以下脚本(也找到了here):
<?php
// Author: Ngo Minh Nam
$dir = "azureuser@drone7.cloudapp.net:/home/azureuser/git/drones/";
$output = array();
chdir($dir);
exec("git log",$output);
$history = array();
foreach($output as $line){
if(strpos($line, 'commit')===0){
if(!empty($commit)){
array_push($history, $commit);
unset($commit);
}
$commit['hash'] = substr($line, strlen('commit'));
}
else if(strpos($line, 'Author')===0){
$commit['author'] = substr($line, strlen('Author:'));
}
else if(strpos($line, 'Date')===0){
$commit['date'] = substr($line, strlen('Date:'));
}
else{
$commit['message'] .= $line;
}
}
print_r($history);
?>
根据使用该脚本的用户,它应该工作。我个人认为,在我们的案例中,问题在于one.com托管我们的网站,而Git托管在我们项目团队中其他人创建的远程服务器上,应该可以通过以下方式访问:azureuser @ drone7.cloudapp.net:/家庭/ azureuser / GIT中/寄生虫/
这导致chdir只能找到位于我们网站层次结构中的文件夹。
有谁知道我们如何解决这个问题,并且能够在我们的网站上显示来自git日志(来自远程服务器)的信息?
答案 0 :(得分:1)
如果您ssh
访问远程git服务器,则可以通过ssh连接呼叫git log -10
。要自动调用此命令,您应该使用公钥认证。
ssh azureuser@drone7.cloudapp.net "cd /home/azureuser/git/drones/; git log -10;"
在PHP中,这将是这样的:
$output = [];
exec(
'ssh azureuser@drone7.cloudapp.net "cd /home/azureuser/git/drones/; git log -10;"',
$output
);
注意:执行此PHP脚本的用户需要在远程服务器上进行公钥认证。
正如piotrekkr所提到的,如果服务器安装了PHP ssh2扩展,您可以使用它来远程调用命令
$connection = ssh2_connect('drone7.cloudapp.net', 22);
// Authentication. Use the return value of the function to determine if the login
// was successful.
//
// Use either password ...
ssh2_auth_password($connection, 'azureuser', 'password');
// ... or public key authentication
ssh2_auth_pubkey_file(
$connection,
'azureuser',
'/home/azureuser/.ssh/id_rsa.pub',
'/home/azureuser/.ssh/id_rsa'
);
// Call git log command on the remote server
$stream = ssh2_exec($connection, 'cd /home/azureuser/git/drones/; git log -10;');
// Make stream blocking
stream_set_blocking($stream, true);
$lines = []
// We do not use `stream_get_contents` because of the possibly large output
while ($line = fgets($stream));
$lines[] = $line;
}
为了更方便地访问git存储库,您可以使用像gitlib这样的PHP git库。认为这是思考的食物。