PHP exec() не возвращает сообщение об ошибке в выводе


Я пытаюсь получить определенный вывод для команды 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)

И вот результат, который я получаю от переменной $output с помощью var_dump:

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

Как вы можете видеть, переменная $output не возвращает третью строку вывода, где это делает терминал. Пожалуйста, помогите мне получить тот же вывод, что и в терминале (я даже пытался использовать методы shell_exec() или system(), но они возвращают тот же вывод, что и exec()) Как мне получить полную отдачу? Заранее благодарю вас!

Author: jww, 2010-10-05

3 answers

Вам также нужно захватить 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);
 69
Author: racetrack, 2010-10-05 12:57:13

Вероятно, это не решение, просто плохое предложение: вы пытались добавить дополнительное эхо в команду:

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);
 0
Author: Cedric, 2010-10-05 12:56:58

Вам необходимо определить переменную, в которой будет храниться сообщение

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

 -2
Author: ant, 2010-10-05 12:58:28