2009-09-01 10 views
10

Ich habe ein PHP-Skript, das 10 verschiedene Server verbindet, um Daten zu erhalten. Ich möchte, dass die Ergebnisse der ersten Verbindung gedruckt werden, bevor die zweite beginnt.Druckergebnisse sofort (php)

+0

Bitte erläutern Sie und geben Sie ein Beispiel für den Code, den Sie verwenden –

Antwort

23

Mit flush und/oder ob_flush sollten Sie bekommen, was Sie wollen.

Hier ist eine kurze Demonstration:

for ($i=0 ; $i<10 ; $i++) { 
    echo "$i<br />"; 
    ob_flush(); 
    flush(); 
    sleep(1); 
} 

Jede Sekunde wird eine Nummer an den Browser gesendet werden, ohne dass für die Schleife/script warten zu beenden.
(Ohne beiden bündig und ob_flush, wartet er bis zum Ende des Skripts um die Ausgabe zu senden)


Erklärung darüber, warum Sie beide benötigen, von der bündigen Seite im Handbuch zu zitieren:

Spült die Schreibpuffer von PHP und was immer Backend PHP verwendet (CGI, ein Webserver, etc). Dies versucht Push-Strom den ganzen Weg zum Browser mit ein paar Einschränkungen.

flush() nicht in der Lage sein die Pufferungsschema Ihrer Web Server außer Kraft zu setzen, und es hat keine Auswirkungen auf clientseitige Pufferung im Browser. Es hat auch keinen Einfluss auf PHP Userspace Ausgabepuffermechanismus. Das bedeutet Sie müssen sowohl ob_flush() als auch flush() aufrufen, um die ob-Ausgabe Puffer zu löschen, wenn Sie diese verwenden.


Wenn dies nicht für Sie arbeiten, einen Blick auf die Kommentare auf den beiden Seiten des Handbuchs nehmen können Sie ein paar Hinweise geben auf

+0

@sshow: Ich habe gehört, diese Frage ein paar Mal von Kollegen bei der Arbeit, tatsächlich - und benutzte es selbst einmal oder zweimal - das hilft ^^ –

+0

Danke, tolle Antwort! Hat viel geholfen. –

2

„Warum könnte es scheitern“ ob_end_flush http://us.php.net/ob_end_flush

dieser Funktion wird der Ausgangspuffer leert und Ausgabepufferung deaktiviert. Alles nach dieser Funktion wird sofort an den Browser gesendet.

0

Ja, ob_flush sollte es tun. Ich mache das die ganze Zeit mit einer LOOONG-Seite, wenn ich den Fortschritt der Operation beobachten will.