PHP exec()没有在输出中返回错误消息

时间:2010-10-05 12:43:03

标签: php xml svn exec

我正在尝试以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()相同的输出)如何获得完整输出? 提前谢谢!

3 个答案:

答案 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/');