Intereting Posts
Ошибка: mysqli :: real_connect (): (08004/1040): Слишком много соединений Как найти значение min float в нескольких массивах, если один из элементов quil zero Преобразование MB / KB в PHP Добавьте 1-часовой выход к текущему времени / дате получить список активировать плагин в wordpress и удалить ссылку плагина из меню администратора Проблема получения текстового поля в виде строки из MySQL с PHP Как автоматически удалить сеанс через 5 минут бездействия на веб-сайте в php Как использовать Selenium с PHP? Данные POST JSON через CURL и захват Вызовите функцию-член get_news () для не-объекта в C: \ xampp \ htdocs \ CodeIgniter_Practice \ application \ controllers \ news.php в строке 11 Дополнительные changeColumns в Doctrine generate-migrations-diff Создание динамического запроса mysql с использованием переменных php PHP испускает 500 на ошибках – где это документировано? lumen: App \ Http \ Controllers \ Класс контроллера не найден с новой установкой Как получить показанное изображение из почтовой ссылки с помощью WordPress?

Как запустить скрипт оболочки с живой обратной связью с PHP?

Как я могу выполнить сценарий оболочки из PHP, предоставляя постоянную / прямую обратную связь в браузере? Я понимаю из документации по системной функции:

Вызов system () также пытается автоматически очистить выходной буфер веб-сервера после каждой строки вывода, если PHP работает как серверный модуль.

Я не понимаю, что они означают, запустив его как «серверный модуль».

Пример кода PHP:

<?php system('/var/lib/script_test.sh'); 

Пример кода оболочки:

 #!/bin/bash echo "Start..." for i in {1..10} do echo "$i..." sleep 1 done echo "Done." 

Что это значит: он будет ждать около 10 секунд, а затем сбрасывается в выходной буфер.

Я хочу, чтобы это выполнялось: Сбросьте выходной буфер после каждой строки вывода.

Это можно сделать, используя popen (), который дает вам дескриптор запуска любого процесса, который вы открываете. Куски данных могут быть отправлены клиенту с использованием ob_flush () , данные могут отображаться с использованием XHR.

Один из вариантов – записать файл в сценарий оболочки на каждом шаге, чтобы сказать, где это необходимо. На своей веб-странице используйте вызов ajax каждые X секунд / минут. Вызов ajax вызовет скрипт PHP, который читает файл состояния и возвращает статус или завершенные шаги.

Преимуществом этого подхода является то, что информация о текущей странице будет доступна нескольким посетителям, а не только той, которая фактически инициировала сценарий оболочки. Очевидно, что это может быть или не быть желательным в зависимости от ваших потребностей.

Конечно, недостатком является более длинный интервал ajax, тем более устаревшим будет обновление.