小技巧:在PHP中调用多条shell指令

小技巧:在PHP中调用多条shell指令

作者:BlogUpdater |  时间:2017-06-24 |  浏览:4375 |  评论已关闭 条评论

有时候,在持续集成的过程中,需要通过网页在目标服务器上执行shell指令,今天就列举一个实例进行讲解。
比如,我们需要能通过网页将SVN update进行自动化,那么,可以在PHP中编写如下脚本:

<?php

// Run single system command
exec("ipconfig 2>&1", $output, $code);
var_dump($output);
var_dump($code);

// Run multiple shell commands
exec("cd %cd%\svn_repo_child_folder\test && svn update 
           --username <your-repo-username> --password <your-repo-password> 2>&1", $output, $code);
var_dump($output);
var_dump($code);


以上代码演示了使用PHP中的exec函数执行多条shell指令的方法。需要注意以下几个要点:
1) 多条指令执行需要使用&&作为间隔,而不是分号;
2) 结尾的2 >&1 表示将标准错误也输出到标准输出,这样,我们可以查看shell执行的结果,不论其执行成功还是失败,这样对于查找错误原因很有帮助。
3) exec的第二个参数表示shell脚本执行的输出内容,第3个参数表示最后一条shell指令执行后的退出代码。一般0表示执行成功,非0表示执行失败。

具体针对上述实例中的svn update来说,还需要注意以下两点:
1) php中的shell指令时在web server的用户权限上执行的,一般对于Windows上的IIS来说,这个用户是I_USER,所以,执行指令之前需要确保I_USER用户对repo目录拥有读写权限。
2) 由于上面1的原因,如果尝试update一个https的仓库,因为I_USER用户无法显示图形界面,所以无法选择保存证书。Work around方式为:使用HTTP方式,并在shell指令中指定svn repo的用户名和密码。但是请注意,这种方法会暴露repo的登录凭证,需要谨慎使用。

标签:

评论已关闭。