Intereting Posts
Логический режим, где запрос соответствия с динамическим значением, используя PHP MySQLi Подготовленные заявления $ _SERVER не отображается www.example.com Какова точность для библиотеки PHP в формате bcmath? PHP Предупреждение: mysqli_fetch_assoc () ожидает ровно 1 параметр, 3 заданный в Редактирование пользователя с ошибкой неверно изменяет имя пользователя app.user.username, как его решить? Что произойдет, если mysql_insert_id будет вызывать разные места и разные браузеры одновременно? Как преобразовать выражения ereg в preg в PHP? Настройка внутреннего указателя массива без итерации в PHP Как отправить данные в iframe с помощью JQuery Как передать URL-адрес в контроллер CodeIgniter? Вызов функции javascript из контроллера codeigniter Преобразование объекта в массив в laravel Сохранение HABTM с дополнительными полями? Получение солнечных данных из широты и долготы в php Нужна помощь в создании запроса на основе значений фильтра ui

php shell_exec с обновлением в реальном времени

У меня есть эта программа оболочки, которую я хочу выполнить 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); } 

существует два возможных поведения:

  1. Non Block, где вам нужно сделать что-то еще между флешами (@GameBit показывает, как это сделать).

  2. С блоком, где вы ждете, пока вызываемая команда не закончится, в этом случае посмотрите 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();