Volgorde van uitvoeren.

Status
Niet open voor verdere reacties.

stuur

Gebruiker
Lid geworden
28 nov 2011
Berichten
30
In een PHP-script wordt de externe database bijgewerkt.

PHP:
echo "De website wordt bijgewerkt ...<br>";	
## Het bijwerken van de database	
for ($n=1;$n<$a; $n++)	{	
  update het  record[$n];
  print het record[$n];
}
Op zich werkt het prima.
ALLEEN:
de tekst De website wordt bijgewerkt verschijnt pas nadat de hele lus is afgewerkt.
Hoe bereik ik, dat achtereenvolgens eerst de tekst wordt afgedrukt, dan elk record wordt afgedrukt na uitvoering, en niet aan het einde van de totale bewerking?
 
Word het script niet gewoon te snel uitgevoerd?

misschien kun je het zo ff uit testen

echo date('h:i:s') . "<br />";
echo "De website wordt bijgewerkt ...<br>";
//sleep for 10 seconds
sleep(10);
## Het bijwerken van de database
for ($n=1;$n<$a; $n++) {
update het record[$n];
print het record[$n];
}
//start again
echo date('h:i:s');
 
Maakt geen verschil. De complete tekst komt in één keer op het scherm.
 
Is het niet zo dat PHP (of apache) alles in een buffer opslaat en dit pas op het scherm zet als het script klaar is, of de buffer 'groot genoeg' is?
Volgens mij is er een PHP functie om de buffer naar het scherm te laten sturen, wellicht kan je daar eens naar kijken.
Deze zou je direct na je echo neer kunnen zetten.

Ik weet alleen even niet meer hoe die functie heet... :confused:

Edit: je zou deze eens kunnen proberen: flush.
 
Laatst bewerkt:
Als volgt gedaan:
ob_start();
echo "De website wordt bijgewerkt ...<br>";
ob_end_flush();
..
Geen enkele verandering. Nog steeds de hele boel in één keer op het scherm.
 
Voor dit kun je de functie flush() gebruiken.

echo "De website wordt bijgewerkt ...<br>";
flush();

Als dit niet werkt, kun je ook er voor zorgen dat alles wat je output direct wordt verstuurd met de functie ob_implicit_flush(). Deze functie roep je net zoals session_start() simpel bovenaan de pagina aan. Probeer maar eens:

ob_implicit_flush();

echo 'Test 1';
sleep(10);
echo 'Test 2';
 
Wel flush() gebruiken, maar niet ob_start, en nu werkt het. Bedankt voor de tips.
PHP:
echo "De website wordt bijgewerkt ...<br>"; 
flush();
## Het bijwerken van de database    
for ($n=1;$n<$a; $n++)  {   
  update het  record[$n];
  print het record[$n];
  flush();
...
 
Laatst bewerkt:
ob_start() start de buffer, en zorgt ervoor dat er nog geen headers en andere dingen worden verstuurd naar de browser. ob_start() is een geweldige functie als je tussen de echo's door nog een cookie of een header moet aanpassen, maar verder heeft de functie niet heel veel nut. ob_implicit_flush() is een functie die je een terminal/dos achtige look kan schenken, en deze kan ook handig zijn om bijvoorbeeld eerst de basis van een site te laten laden, en daarna wat toeters en bellen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan