Подтвердить что ты не робот

Php exec() не возвращает сообщение об ошибке на выходе при выполнении команды svn

Я пытаюсь получить определенный вывод для команды 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()). Как получить полный вывод? Заранее благодарю вас!

4b9b3361

Ответ 1

Вам нужно также захватить 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);

Ответ 2

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

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

Ответ 3

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

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