Print direkt ausgeben (ohne Umweg über Buffer)
Michael
- php
Hallo zusammen
Im Zusammenhang mit einem Script habe ich gemerkt, dass Print-Befehle zuerst in einen Buffer umgeleitet werden und erst dann ausgegeben werden, was mir aber nicht behagt. Gibt es eine Möglichkeit dies zu umgehen und zu erreichen, dass jegliche Print-Befehle in php sofort nach Aufruf im Browser erscheinen?
Danke für evt. Antworten.
Michael
Hallo zusammen
Im Zusammenhang mit einem Script habe ich gemerkt, dass Print-Befehle zuerst in einen Buffer umgeleitet werden und erst dann ausgegeben werden, was mir aber nicht behagt. Gibt es eine Möglichkeit dies zu umgehen und zu erreichen, dass jegliche Print-Befehle in php sofort nach Aufruf im Browser erscheinen?
Zumindest PHP-seitig geht das nicht, da hier standardmäßig kein solchartiger Buffer existiert, jede Ausgabe wird direkt ins StdOut geschrieben; das heißt, der Webserver übernimmt es zu entscheiden, ob die Antwort eines Scripts Stück für Stück oder als Ganzes gesendet wird. Ob man das beeinflussen kann, bezweifle ich zwar, aber evtl. hilft ja ein Blick ins jeweilige Manual.
Gruß,
KonRad -
Ich weiß jetzt ja nicht, wofür das gebraucht werden soll, aber vielleicht hilft dir in deinem Fall das Leeren des Buffers mit flush() weiter.
Vielen Dank für die Tipps / Infos. Die Funktion wird im Zusammehang mit einem umfangreichen PHP-Scripts benötigt, das mehrere Stunden abläuft und Kontrolldaten mittels print auf dem Bildschirm ausgibt.. einfach eben nicht immer sehr stetig sondern immer einige Zeilen miteinander. Flush habe ich ausprobiert, hat aber nichts gebracht.
Ich werde in diesem Falle mit der etwas langsameren Ausgabe leben :-) Danke!
Gruss, Michael
Hello,
Vielen Dank für die Tipps / Infos. Die Funktion wird im Zusammehang mit einem umfangreichen PHP-Scripts benötigt, das mehrere Stunden abläuft und Kontrolldaten mittels print auf dem Bildschirm ausgibt.. einfach eben nicht immer sehr stetig sondern immer einige Zeilen miteinander. Flush habe ich ausprobiert, hat aber nichts gebracht.
Ich werde in diesem Falle mit der etwas langsameren Ausgabe leben :-) Danke!
Weder PHP noch die Ausgabe per HTML sind bei Programmen, die mehrere Stunden laufen sollen, der richtige Weg. Da sollte man doch eine echte sichere Verbindung zum Server aufbauen (z.B. ssh) und dann die Ausgabe auf dieser Konsole und in einer Protokolldatei betrachten.
Noch was zu flush(). Das funktioniert nur richtig, wenn es keinen Dateizugriffsfehler gegeben hat, bzw. nicht mehrere Handles existieren.
Ich weiß leider nicht, wie in PHP das Handle für STDOUT heißt. Aber man müsste eigentlich
flush(STDOUT);
schreiben, wenn STDOUT denn die Script-Konstante mit dem Handle wäre.
Woher soll PHP sonst wissen, wessen Buffer es leeren soll?
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Konrad,
Zumindest PHP-seitig geht das nicht, da hier standardmäßig kein
solchartiger Buffer existiert, jede Ausgabe wird direkt ins StdOut
geschrieben;
Das ist nicht wahr. PHP benutzt (als Webserver-Modul) die "ganz
normalen" Apache-API-Funktionen. Und die haben einen Buffer von etwa
256 Byte, wenn ich mich jetzt nicht irre. PHP in der Kommandozeile
benutzt übrigens die C-Standard-I/O-Routinen, und die buffern auch.
Im Normalfall wird der Buffer hier nach einem Newline-Zeichen
entleert.
Grüße,
CK