Michael: Print direkt ausgeben (ohne Umweg über Buffer)

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

  1. 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 -

    --
    "Was Gott zusammengeführt hat ..." :: polithink.org -
    the politicultural e-zine :: http://www.polithink.org
    1. 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.

      1. 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

        1. 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

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    2. 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

      --
      Zu wissen, was wir nicht wissen, ist die Quelle der Weisheit.