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

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

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

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

Спасибо.

Ответы

Ответ 1

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

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

Edit:

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

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

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

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

Изменить 2

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

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

Ответ 3

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