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()) Как мне получить полную отдачу? Заранее благодарю вас!
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);
Вероятно, это не решение, просто плохое предложение: вы пытались добавить дополнительное эхо в команду:
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);
Вам необходимо определить переменную, в которой будет храниться сообщение
$msg = exec('/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/');