Php system () / exec () не возвращает результат

Для обычных команд, таких как '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 

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

Есть идеи?

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

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

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

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

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

Мое решение: когда нет выхода, предположим, что оно не выполнено. Мои журналы apache будут грязными, но что угодно.