Kai PHP skripto vykdomas trunka ilgą laiką, ir neaišku, kas ten vyksta, pavyzdžiui, ilgas ciklas, užtrukęs apdorojimas, lietingi orai, ar kiti stebuklingi dalykai. Tai atsiranda noras matyti, kas vyksta su duomenimis ir kokiame eigos etape yra programos vykdymas. Vienas iš variantų funkcija flush(), kuri išvalo PHP išvedimo buferį ir visas jo turinys siunčiamas į naudotojo naršyklę.
<? header('Content-Type: text/plain; charset=utf-8'); //neribojamas skripto vykdymas set_time_limit(0); //ciklas for($i=0;$i<1000;$i++){ //duomenų išvedimas echo "\nciklas: $i eiga: ".round($i/10)."%"; //išvalyti ir siųsti PHP išvedimo buferio flush(); //pauzė stebėjimui usleep(100000); }
Kita galimybė rašyti duomenis į atskirą failą ir parodyti šio failo turinį naršyklėje laikas nuo laiko atnaujinant. Reikės rašyti duomenis į failą:
<? set_time_limit(0); for($i=0;$i<1000;$i++){ //rašyti duomenis į failą log.txt, turite nustatyti failų rašymo teises file_put_contents('log.txt', "loop: $i<br> progress: ".round($i/10)."%"); //pauzė stebėjimui usleep(100000); }
Toliau duomenų failas bus nuskaitytas su JQuery load funkcija:
<!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(){ //nuskaityti failo turinį ir atvaizduoti elemente su id="progress" $('#progress').load('log.txt'); }, 1000); //kas 1 sekundę }); </script> </head> <body> <div id="progress"></div> </body> </html>