У меня есть эта программа оболочки, которую я хочу выполнить php. Проблема в том, что это может занять много времени, и из-за этого мне нужно, чтобы оно обновлялось в реальном времени в браузере пользователя.
Я читал, что мне может понадобиться использовать popen (), чтобы сделать это, но я вроде (хорошо, я действительно есть: P) PHP noob и не могу понять, как я могу это сделать.
Поблагодарили бы за любую помощь!
if( ($fp = popen("your command", "r")) ) { while( !feof($fp) ){ echo fread($fp, 1024); flush(); // you have to flush buffer } fclose($fp); }
существует два возможных поведения:
Non Block, где вам нужно сделать что-то еще между флешами (@GameBit показывает, как это сделать).
С блоком, где вы ждете, пока вызываемая команда не закончится, в этом случае посмотрите passthru function
есть грязный легкий вариант
`yourcommand 1>&2`;
перенаправление stdout в stderr.
попробуйте этот код (протестирован на компьютере Windows + wamp server)
header('Content-Encoding: none;'); set_time_limit(0); $handle = popen("<<< Your Shell Command >>>", "r"); if (ob_get_level() == 0) ob_start(); while(!feof($handle)) { $buffer = fgets($handle); $buffer = trim(htmlspecialchars($buffer)); echo $buffer . "<br />"; echo str_pad('', 4096); ob_flush(); flush(); sleep(1); } pclose($handle); ob_end_flush();