2010-03-04 10 views
6

J'ai besoin d'un correctif pour cela.
est ici juste partie de mon codeproblème d'écho/impression en php while loop

<?php 
$number = 30; 
while($number > 0) { 
$number--; 
sleep(30); 
print "$number . Posted<br>"; 

} 
?> 

Le processus en boucle dans la boucle est en réalité beaucoup plus, je viens de mettre les choses importantes.

Quoi qu'il en soit, comme vous pouvez le voir devrait imprimer
30 posté
(attendre 30 secondes)
29 Posté
(attendre 30 secondes)
28 Posté
(attendre 30 secondes)

Mais Au lieu de cela, il attend que la boucle soit terminée, puis imprime tout à la fois. Y a-t-il une solution pour cela? Je pensais à une méthode ajax, mais je n'en connais aucune.

Répondre

15

Joli que tout le monde a expliqué pourquoi. Ceci est dû au fait que par défaut, PHP va tout traiter avant de "rincer" quelque chose au navigateur. En imprimant chaque ligne, il stocke ces informations dans le tampon qui seront toutes imprimées simultanément une fois l'exécution de PHP terminée.

Si vous voulez que PHP vole ce contenu au navigateur immédiatement après la ligne, vous devez appeler flush() après chacun d'entre eux, puis il sortira le texte une ligne à la fois après chaque appel.

+0

+1 pour fournir une bonne explication. – GSto

4

Appelez flush() après l'impression.

0

Vous pourriez mettre \n en echo ou print pour vider le tampon.

1

Un exemple d'une boucle avec flush() est

<?php 
ob_start(); 
for ($i = 0; $i < 10; $i++) 
{ 
    echo "<div>" . time() . ": Iteration $i</div>"; 
    sleep(1); 
    ob_flush(); 
    flush(); 
} 
ob_end_flush(); 
?> 

Vous ne devriez pas rincer souvent parce que vous forcez php pour traiter les messages et cela augmentera le temps d'exécution.