Svnコマンドの特定の出力をXML形式で取得しようとしています。有効なパラメーターを入力しても出力は正常です。ただし、間違ったパスワードを入力すると、出力にエラーメッセージが表示されません。これは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変数は、ターミナルが出力する3行目の出力を返しません。ターミナルで取得するのと同じ出力を取得するのを手伝ってください(Shell_exec()またはsystem()メソッドで試しましたが、exec()と同じ出力を返します)完全な出力を取得するにはどうすればよいですか?前もって感謝します!
stderr
もキャプチャする必要があります。
stderr
をstdout
にリダイレクトするとうまくいきます。追加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);
それはおそらく解決策ではなく、単に悪い提案です:コマンドに余分なエコーを追加しようとしましたか?
exec('/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/;**echo ""**', $output);
そして、それを解決するもう1つの方法は、すでに述べたとおりです。$ 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);