Когда PHP скрипт выполняется долго и не понятно что в нём творится, например долгий цикл, затянувшаяся обработка данных, дождливая погода или другие колдовские штучки. То есть желание увидеть что творится с данными и на какой стадии выполнения находится скрипт программы. Один из вариантов использовать функцию flush() которая очищает буфер вывода PHP и всё его содержимое отправляет в браузер пользователя.
<? header('Content-Type: text/plain; charset=utf-8'); //неограниченное время выполнения скрипта set_time_limit(0); //цикл for($i=0;$i<1000;$i++){ //вывод данных echo "\nцикл: $i количество: ".round($i/10)."%"; //отчистка и отправка данных буфера flush(); //пауза для наглядности usleep(100000); }
Другой вариант использовать записывать данные скрипта в отдельный файл и этот файл периодически подгружать в браузер. Для этого понадобится записывать данные в файл из скрипта:
<? set_time_limit(0); for($i=0;$i<1000;$i++){ //запись данных в файл log.txt, нужно изменить права на запись file_put_contents('log.txt', "цикл: $i<br> количество: ".round($i/10)."%"); //пауза для наглядности usleep(100000); }
Дальше файл с данными будет подгружать jQuery функция load:
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8" /> <title>Progress</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script language="javascript" type="text/javascript"> $(document).ready(function() { var reload = setInterval( function(){ //загружаем данные из файла и отображаем в элементе id="progress" $('#progress').load('log.txt'); }, 1000); //каждую секунду }); </script> </head> <body> <div id="progress"></div> </body> </html>