2010-10-05 70 views
33

我想獲得某些輸出爲svn命令在XML格式。輸入有效參數時輸出正常。但是,當我輸入錯誤密碼時,輸出不會顯示錯誤消息。 這是PHP代碼:PHP exec()沒有返回錯誤信息在輸出

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:

array(2) { 
[0]=> 
string(21) "<?xml version="1.0"?>" 
[1]=> 
string(5) "<log>" 
} 

正如你所看到的$輸出變量不返回輸出的第三行,終端的地方。請幫助我獲得與終端相同的輸出(我甚至嘗試使用shell_exec()或system()方法,但它們返回的輸出與exec()相同)如何獲得完整輸出? 提前謝謝!

回答

62

您需要捕獲stderr了。

重定向stderrstdout應該做的伎倆。將2>&1附加到命令的末尾。

例如

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); 
+0

這解決了這個問題。非常感謝你。 – Goran 2010-10-05 13:40:40

+8

另外:PHP的執行不提供一個簡單的方法來分別捕獲'stderr'輸出是不是很奇怪? – 2013-06-16 02:31:32

-2

您需要定義在其中存儲的信息

$msg = exec('/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51 _activecollab/');

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

而另一種解決問題的方式就像已經提到的那樣:如果您沒有$輸出中的最後一行,它總是返回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);