Php system () / exec () не возвращает вывод - PullRequest
4 голосов
/ 09 апреля 2011

Для обычных команд, таких как 'ls', exec () работает нормально, например:

exec('ls',$output,$retval);
var_dump($output,$retval);
// $output contains an array of filenames, and retval === 0

Но при попытке выполнить другую программу я не могу получить вывод:

exec('some_command --a_parameter',$output,$retval);
var_dump($output,$retval);
// $output contains an empty array, end $retval === 0

Эта команда печатает несколько строк при выполнении его непосредственно из командной строки. Я знаю, что команда была успешной из-за результатов (некоторые файлы обновлены, добавлены данные и т. Д.), И все же я не вижу вывод.

Есть идеи?

Ответы [ 2 ]

19 голосов
/ 09 апреля 2011

Похоже, что программа выводит свои предупреждения на стандартную ошибку, а не на стандартный вывод.exec будет ловить только стандартный вывод.Я не знаю наверняка, что стандартная ошибка всегда отправляется в журнал ошибок Apache, но это кажется вероятным.

Если вам не нужна совместимость с не-nix системами, вы можете перенаправить стандартную ошибку настандартный вывод путем добавления 2>&1 к команде:

exec('some_command --option 2>&1', $output, $ret);

Это должно сделать предупреждения доступными для вашей программы php и предотвратить ненужное ведение журнала.

0 голосов
/ 09 апреля 2011

Весь вывод отправлялся в httpd / error_log, когда по какой-то причине *, когда приложение обнаружило предупреждение (что-то внутреннее, даже не смертельное)нет вывода, предположим, что это не удалось.Мои журналы apache испачкаются, но неважно.

...