2009-06-10 2 views
6

Standardmäßig wird nichts gedruckt, bis die gesamte Seite fertig ist.Wie kann man in PHP direkt ein Echo ausdrucken?

Gibt es irgendeine Funktion, die es sofort ausspülen lässt?

Aber nicht durch ob_end_flush() mehrere Male anrufen, was ich nicht will.

Hoffen Sie Jungs mich?

Antwort

8

Wenn die Pufferung der Ausgabe aktiviert ist, können Sie mit der Funktion "Flushing" nur die Daten an den Browser ausgeben. Wenn Sie sofort ausgeben möchten, schalten Sie die Ausgabepufferung aus. Wenn dies nicht in Ihrer Kontrolle ist, können Sie einfach ob_end_flush() im Skript-Skript aufrufen, was die Ausgabepufferung deaktiviert. Es gibt jedoch keine Möglichkeit, einige Nachrichten passieren zu lassen, und einige nicht (ohne benutzerdefinierte Echo/Druckfunktionen zu schreiben)

aufrufen ob_end_flush() wird den obersten Ausgabepuffer spülen und ausschalten. Um sicherzustellen, dass alle Ausgangspuffer ausgeschaltet und spült man leicht tun können:

while (@ob_end_flush()); 
+0

+1 Sie würden richtig sein – karim79

+0

Meinst du, dass durch den Aufruf von ob_end_flush() die nachfolgenden echo/print Funktionen sofort ausgegeben werden? – omg

+0

@Shore, Ja das ist was ich meine. Der Aufruf von ob_end_flush() schaltet den obersten Ausgabepuffer um. –

6

Es hängt von Ihrem Webserver ab. Der Aufruf flush spült die Ausgabe von was auch immer aktuellen Puffer geöffnet ist, aber, wie es auf der verlinkten Seite sagt:

flush() hat keine Auswirkung auf das Pufferschema des Webservers oder den Browser auf der Client-Seite . Daher müssen Sie sowohl ob_flush() als auch flush() aufrufen, um die Ausgabepuffer zu löschen.

Mehrere Server, insbesondere Win32, werden die Ausgabe Ihres Skripts weiterhin puffern, bis sie beendet wird, bevor die Ergebnisse an den Browser übertragen werden.

Server-Module für Apache wie mod_gzip können ihre eigenen Puffer erstellen, was dazu führt, dass flush() nicht dazu führt, dass Daten sofort an den Client gesendet werden.

1

Sie könnten deaktiviert die Ausgabe-Pufferung auf Ihre Entwicklung/Test-Server. Ändern Sie die Variable output_buffering in Ihrer Konfigurationsdatei php.ini.

0

ob_end_flush() wird eine Meldung ausgeben, wenn sie oben im Skript verwendet wird, wenn kein Puffer zum Leeren vorhanden ist. Dies kann ein Problem sein, wenn Sie Cookies oder Header festlegen möchten. Ich fand, dass es die Pufferung auf meinem geteilten Server (Rackspace Reseller) nicht beeinflusste.