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