Как выдавать браузеру прогресс работы скрипта

Serafer

Создатель
Заблокирован
Регистрация
5 Май 2016
Сообщения
21
Реакции
10
Возможно не в тему, но похоже. Кроме того свою создать не могу так что....
Как выдавать браузеру прогресс работы скрипта? То есть обходим, допустим, массив, а в браузере в это время Progress Bar показывает прогресс обхода цикла. Видел реализацию подобного в скрипте распаковки джумлы от акибы(Для просмотра ссылки Войди или Зарегистрируйся), но в нём сам чёрт ногу сломит. Интересует чисто теоретическая часть как это можно реализовать. В гугле везде только ob_flush, но он не работает. Спасибо!
 
Serafer, вот вообще не в тему, но фиг с ним.

Ответ прост: никак. PHP не знает как долго ему придётся обрабатывать твой скрипт, проходить массив и т.д. Так же он не знает сколько осталось сделать, сколько сделано и т.д.

Делаются подобные вещи 3 способами:
1) Мы задаём переменную, в которой храним "сколько надо сделать" и вторую переменную-счётчик "Сколько сделано". Дальше выводим эти 2 значения куда-либо (бд, файл и т.д.), а уже другим скриптом, к примеру, через AJAX, забираем эти значения и рисуем полосочку
2) Парсинг текущего вывода скрипта через JS - подробнее тут: Для просмотра ссылки Войди или Зарегистрируйся
3) PHP вообще не участвует, работает только сам JS. Это для програсс-баров загрузки файла на сервер, к примеру - PHP ещё даже не знает размер файла, который к нему придёт, а вот браузер - знает.

P.s. первый способ является самым простым, минимум кода и кросс-платформенный (т.е. данные о % обработки может получать не только автор запроса, но и любой сторонний наблюдатель - удобно для отслеживания cron, к примеру)
 
По-моему, проще результат выполнения скрипта разбить на несколько этапов (шагов). Прохождение каждого этапа записывать куда-нибудь в базу.
А клиентом дергать другой скрипт, который проверяет состояние и выводит соответствующий результат.
Зачем заставлять делать все это только один скрипт?
 
Назад
Сверху