flush unter apache

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • flush unter apache

    Hi,
    ich habe ein Skript, welches ein paar Befehle auf dem Server ausführt und dateien hochlädt. Das dauert natürlich ein wenig. Daher möchte ich, dass der Benutzer über den Status laufend informiert wird.
    Zur Vereinfachung also:
    PHP-Code:
    foreach ($commands as $cmd) { 
        echo 
    'Befehl '.$cmd.' wird ausgeführt ... ';
        
    flush();
        
    system($cmd);
        echo 
    'OK <br />';
        
    flush();

    Ich weiss, dass das skript ein wenig unsinnig ist, aber es ist wie gesagt nur ein beispiel. Das Problem ist, dass in der obigen Darstellung die Seite erst am Ende des skripts angezeigt wird.
    Ich habe auch schon versucht vor jedem echo ein paar Leerzeichen auszugeben (ein paar tausend um genau zu sein). Dann wird die Seite zwar früher gezeigt, allerdings sieht der Benutzer nicht, welcher Befehl gerade ausgeführt wird, da die ausgabe bis ein paar zeilen VOR der eigentlich gewünschten Zeile erfolgt.
    Meine Vermutung ist, dass da irgendwas mit einem puffer läuft. Allerdings weiss ich nicht wo. Hat jemand ähnliche Probleme gehabt und sie gelöst?

    danke,
    Morgoth81

  • #2
    Einige Webserver, besonders auf Windwos, puffern Ihre Scriptausgaben weiterhin bis zum Scriptende befor Sie sie zum Browser übertragen.

    Auch Apache-Module wie mod_gzip puffern zum Teil Ausgaben und verhindern so das Ausgaben nach flush() direkt zum Benutzer weitergegeben werden.

    Selbst Browser können empfangene Ausgaben puffern bevor sie sie tatsächlich darstellen. Netscape Browser z.B. puffern Text bis sie entweder einen Zeilenwechsel oder den Anfang eines Tags emfangen und zeigen Tabellen erst nach dem Empfang des </table> Tags der äußersten Tabelle.

    Einige Versionen des Mircrosoft Internet Explorers beginnen erst dann mit der Ausgabe wenn sie mindestens 256 Bytes empfangen haben. Sie müssen daher eventuell zusätzliche Leerzeichen in Ihre Ausgaben einfügen um eine Darstellung vor Scriptende auf solchen Browsern zu erzwingen.
    Aus dem Manual...

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      danke für die schnelle antwort.
      Ja, die manual-Seite von flush kenne ich mittlerweile auswendig
      Der Server läuft unter linux, apache, ohne jegliche cache/buffer module wie mod_gz, die Ausgabeverzögerung habe ich versucht mit leerzeichen-ausgabe auszuschalten (s. Text am anfang des threads) - der Browser gibt ja was aus, nur nie das aktuelle, sprich nie bis zu der zeile vor dem letzten flush().

      Soll ich mich einfach damit abfinden, dass php nicht für interaktivität während ausführung gedacht ist?

      Kommentar

      Lädt...
      X