Я использую функцию exec для выполнения определенных исполняемых файлов в php.
exec ( $file , $output , $return_value ) ;
Когда данный файл успешно выполнен, я могу получить результат во втором аргументе, проверив возвращаемые значения. Итак, он работает нормально. Но Мое требование – когда получение команды из-за какой-то причине не получается. Мне нужно получить это сообщение об ошибке этой исполняемой программы. Что мне нужно сделать, чтобы получить ошибку. через второй аргумент мы можем получить только успешный вывод. Не сообщение об ошибке.
Благодарю.
Второй $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
будет иметь код ошибки, возвращаемый программой, который должен быть достаточно значимым, я не думаю, что у вас может быть лучше.