PHP exec () не возвращает сообщение об ошибке в выводе - PullRequest
39 голосов
/ 05 октября 2010

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

73 голосов
/ 05 октября 2010

Вам нужно также захватить 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);
0 голосов
/ 05 октября 2010

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

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

И другой способ решения этого, как уже упоминалось: если выпоследняя строка в $ 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 голосов
/ 05 октября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...