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>
