我正在尝试以XML格式获取svn命令的某些输出。输入有效参数时输出正常。但是,当我输入错误的密码时,输出不会显示错误消息。 这是PHP代码:
exec('/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/', $output);
这是我在终端输出的输出:
<?xml version="1.0"?>
<log>
svn: OPTIONS of 'http://a51.unfuddle.com/svn/a51_activecollab': authorization failed: Could not authenticate to server: rejected Basic challenge (http://a51.unfuddle.com)
这是我使用var_dump从$ output变量得到的输出:
array(2) {
[0]=>
string(21) "<?xml version="1.0"?>"
[1]=>
string(5) "<log>"
}
正如您所看到的,$ output变量不会返回第三行输出,其中终端也是如此。请帮助我获得与终端相同的输出(我甚至尝试使用shell_exec()或system()方法,但它们返回与exec()相同的输出)如何获得完整输出? 提前谢谢!
答案 0 :(得分:73)
您还需要捕获stderr
。
将stderr
重定向到stdout
应该可以解决问题。将2>&1
附加到命令的末尾。
e.g。
exec("/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/ 2>&1", $output);
答案 1 :(得分:0)
这可能不是解决方案,只是一个不好的建议:您是否尝试在命令中添加额外的回声:
exec('/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/;**echo ""**', $output);
另一种解决方法就是已经提到过:如果你没有$ output中的最后一行,那么无论如何它都在exec()函数的返回值中。 那你有
$totalOutput = push($msg,$output);
带
$msg = exec('/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/', $output);
答案 2 :(得分:-2)
您需要定义一个用于存储消息的变量
$msg = exec('/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/');