2010-03-04 6 views
6

Ich brauche eine Lösung dafür.
hier ist nur ein Teil meines CodesEcho/Druckproblem in php während Schleife

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

} 
?> 

Der Loop-Prozess in der Schleife tatsächlich viel größer ist, ich habe nur die wichtigen Sachen.

Sowieso wie Sie sehen können es
30 posted
(30 Sekunden warten)
29 Posted
(30 Sekunden warten)
28 Posted
(30 Sekunden warten) gedruckt werden soll

Aber Stattdessen wartet es, bis die Schleife vorbei ist, und druckt dann alles auf einmal. Gibt es eine Lösung dafür? Ich dachte an eine Ajax-Methode, aber ich kenne keine.

Antwort

15

Schön, dass jeder erklärt warum.

Dies liegt daran, dass PHP standardmäßig alles verarbeitet, bevor es irgendetwas an den Browser "ausleert". Durch einfaches Drucken jeder Zeile werden diese Informationen im Puffer gespeichert, die alle gleichzeitig gedruckt werden, sobald PHP fertig ausgeführt ist.

Wenn Sie möchten, dass PHP diesen Inhalt unmittelbar nach der Zeile im Browser löscht, müssen Sie nach jeder Zeile flush() aufrufen, dann gibt es den Text jeweils eine Zeile nach jedem Aufruf aus.

+0

+1 für eine gute Erklärung. – GSto

4

Rufen Sie flush() nach dem Drucken.

0

Sie verwenden könnten \n in echo oder print legte den Puffer zu spülen.

1

Ein Beispiel für eine Schleife mit flush() ist

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

Sie nicht oft spülen sollten, weil Sie PHP-Nachrichten zu verarbeiten zwingen, und dies wird die Zeit der Ausführung zu erhöhen.