У меня есть PHP-скрипт:
$i=0; for(;$i<500;++i) { //Do some operation with files numbered 0 to 500; }
Дело в том, что скрипт работает и отображает конечные результаты, но операция занимает некоторое время, и просмотр пустого экрана может расстраивать. Я думал, если есть способ, я могу постоянно обновлять страницу с конца клиента, детализируя, какой файл в настоящее время обрабатывается. То есть, могу ли я отображать и постоянно обновлять текущее значение $ i ?
Решение
Всем спасибо! Буферизация вывода работает как предложено. Тем не менее, Дэвид предложил ценную информацию, и я также рассматриваю этот подход.
Вы можете буферизировать и контролировать вывод из PHP-скрипта.
Однако вы можете подумать о масштабируемости этого дизайна. В общем, тяжелые процессы не должны выполняться онлайн. Ваш конкретный случай может быть краем в том, что ожидание приемлемо, но рассмотрите что-то подобное в качестве альтернативы для улучшения пользовательского интерфейса:
В общем, это лучший пользовательский интерфейс, поскольку он не заставляет пользователя ждать. Пользователь может перемещаться по сайту и проверять ход выполнения. Кроме того, этот подход масштабируется лучше. Если ваша тяжелая обработка выполняется непосредственно на странице, что происходит, когда у вас много пользователей или загрузка данных увеличивается? Будет ли страница запущена? Будут ли пользователи ждать дольше? Если процесс будет происходить вне сферы действия веб-сайта, вы можете разгрузить его до более совершенного оборудования, если это необходимо, убедитесь, что записи обрабатываются последовательно / параллельно по требованию бизнес-правил (избегайте условий гонки), сохраняйте обработку в нерабочее время и т. Д. ,
Проверьте выходную буферизацию PHP .
Попробуйте функцию flush()
. Вызов этой функции заставляет PHP отправлять любой вывод, который он имеет до сих пор для клиента, вместо ожидания завершения сценария.
Тем не менее, некоторые веб-серверы будут отправлять сообщения только после завершения всей страницы, поэтому вызов flush () не будет иметь никакого эффекта в этом случае.
Кроме того, сами браузеры вводят буфер, поэтому у вас могут возникнуть проблемы. Например, некоторые версии IE не будут отображать страницу до 256 байт.