php: Захват вывода команды

Я использую функцию exec для выполнения определенных исполняемых файлов в php.

exec ( $file , $output , $return_value ) ; 

Когда данный файл успешно выполнен, я могу получить результат во втором аргументе, проверив возвращаемые значения. Итак, он работает нормально. Но Мое требование – когда получение команды из-за какой-то причине не получается. Мне нужно получить это сообщение об ошибке этой исполняемой программы. Что мне нужно сделать, чтобы получить ошибку. через второй аргумент мы можем получить только успешный вывод. Не сообщение об ошибке.

Благодарю.

Solutions Collecting From Web of "php: Захват вывода команды"

Второй $output аргумента $output только STDOUT из вашего исполняемого файла. Сообщения об ошибках обычно отправляются в STDERR так что они легко могут быть записаны в журнал ошибок или аналогичные, но это означает, что вы не увидите их при вызове exec .

Если это Linux-система, вы можете добавить 2>&1 в свою команду, чтобы перенаправить STDERR на STDOUT . Я не пробовал это, но он должен пересылать сообщения об ошибках в вашу переменную $ output.

Редактировать:

Я читал об этом на http://www.php.net/exec , и, похоже, это сработает.

 exec($file.' 2>&1', $outputAndErrors, $return_value); 

Также можно перенаправить ошибки во временный файл и прочитать их отдельно.

 exec($file.' 2> '.$tmpFile, $outputOnly, $return_value); 

Изменить 2

Кажется, что окна также используют этот синтаксис перенаправления вывода стиля Bourne, поэтому примеры должны работать и для окон.

Подробнее о потоках ввода и вывода

Если вам нужно сохранить stderr и stdout отдельно, попробуйте proc_open : http://php.net/manual/en/function.proc-open.php

$return_value будет иметь код ошибки, возвращаемый программой, который должен быть достаточно значимым, я не думаю, что у вас может быть лучше.