Destroyer
Новичок
Взаимодействие с консольной программой
Здравствуйте, у меня такая проблема:
Windows. Есть консольное приложение (не коммандная строка, именно приложение), надо средствами php запустить его, прочитать результат, возможно, послать какие-нибудь команды и закрыть его. Проблема в том, что приложение может долго выводить результат своей работы и php ждет пока программа не сделает всю работу и только потом выдает результат на страницу. Делаю так:
В итоге результат выдается только после того как программа закончит работу или пока ее принудительно вручную незакрыть.
Висит, ожидая, похоже на $s= fgets($pipes[1], 2).
Как сделать так, чтобы результат выводился в браузер на страничку, например, каждую секунду или еще лучше как только прийдет новая информация от программы?
Здравствуйте, у меня такая проблема:
Windows. Есть консольное приложение (не коммандная строка, именно приложение), надо средствами php запустить его, прочитать результат, возможно, послать какие-нибудь команды и закрыть его. Проблема в том, что приложение может долго выводить результат своей работы и php ждет пока программа не сделает всю работу и только потом выдает результат на страницу. Делаю так:
PHP:
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
2 => array("pipe", "w") // stderr
);
$cmd = 'c:\\prog.exe -params';
$command = '"'.$cmd.'"'; // так надо чтобы параметры правильно передались
$process = proc_open($command, $descriptorspec, $pipes);
stream_set_blocking($pipes[1], FALSE);
if (is_resource($process))
{
while($s= fgets($pipes[1], 2)) {
// read from the pipe
// перекодируем из ДОСовской кодировки
$s = iconv("cp866", "cp1251", $s);
echo $s;
fflush($pipes[1]);
}
fclose($pipes[1]);
proc_close($process);
}
Висит, ожидая, похоже на $s= fgets($pipes[1], 2).
Как сделать так, чтобы результат выводился в браузер на страничку, например, каждую секунду или еще лучше как только прийдет новая информация от программы?
