Как запустить скрипт оболочки с живой обратной связью с 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, тем более устаревшим будет обновление.