Получение полного вывода из функции php system () - PullRequest
0 голосов
/ 02 декабря 2011

У меня проблема с выводом функции php system ().Итак, вот код:

system("c:\\Dev-Cpp\\bin\\g++.exe c:\\wamp\\www\\hello.cpp -O3 -o c:\\wamp\\www\\hello.exe", $output);

echo $output;

Итак, если мой hello.cpp выполняет компиляцию, я получаю 0, если не получаю 1. 1. 1004 *

Если я запускаю то же самое из CMDвместо того, чтобы давать только 1, это дает мне полную ошибку.

Как я могу получить полную ошибку с помощью функции php system ()?

1 Ответ

2 голосов
/ 02 декабря 2011

Вы получаете только код возврата программы, который обычно является целым числом, где 0 означает «успех», а все остальное - код ошибки.

Если вы хотите перехватить фактический вывод программы (т. Е. STDOUT и / или STDERR ), вам необходимо выполнить одно из следующих действий:

  • Использование буферизации вывода для захвата вывода system():
$command = "c:\\Dev-Cpp\\bin\\g++.exe c:\\wamp\\www\\hello.cpp -O3 -o c:\\wamp\\www\\hello.exe";
ob_start();
system($command, $returnCode);
$output = ob_get_clean();
exec($command, $output, $returnCode);
// ...or...
$output = shell_exec($command);
// ...or...
$output = `$command`;

Если вы хотите перехватить вывод STDERR (что, я подозреваю, вы делаете), вам может потребоваться добавить 2>&1 в конец вашей командной строки.

В качестве альтернативы вы можете посмотреть на proc_open(), который является более сложным, но может дать вам более точный контроль над дочерним процессом и тем, как он выполняет / передает данные обратно вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...