garry: Text ausgeben in einer While Schleife

Hi @ all

Habe einen PHP Script von dem ich aus einem File eine Liste auslesen lasse und ich möchte, dass mir der Script genau anzeigt wo er sich in der Liste nun befindet. Das Problem was ich habe ist, dass er mir erst nach Ablauf des Scriptes bzw der while-Schleife den ganzen Text anzeigt!!!

Vielleicht hat einer eine Lösung

Beispiel:
...
...
$file = file("$thefile");

while (list($arr) = each($file))
 {
 list ($namen, $bla, $fnum) = split ('[|]', $file[$arr]);
 echo "$name $bla $fnum";
 ....
 ...
 }
....

  1. Habe einen PHP Script von dem ich aus einem File eine Liste auslesen lasse und ich möchte, dass mir der Script genau anzeigt wo er sich in der Liste nun befindet. Das Problem was ich habe ist, dass er mir erst nach Ablauf des Scriptes bzw der while-Schleife den ganzen Text anzeigt!!!

    Vielleicht hat einer eine Lösung

    Ein bißchen Mühe solltest Du Dir schon geben: <?m=89759&t=16047>. Was hälst Du davon, mal in der PHP-Anleitung nach etwas zum flush()en zu suchen?

    Gruß,
      soenk.e

    1. danke für die Hilfe nur gehts dies bei mir nicht!

      z.b. dies funktioniert

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

      aber ich habe nun ein formular das beim senden das PHP Script mit einer action sendet

      z.b.
      ...
      ...
      <form method=POST action=$GLOBALS[realscriptname]?action=do
      ...
      ..
      if($action=="do")
      {
       for($i=0;$i<10;$i++) {
        echo "$i";
        flush();
        sleep(1);
      }
      }
      wird erst nach beenden der Schleife der ganze text angezeigt?
      da nützt kein flush. Was mache ich falsch??

      danke

      1. Moin!

        danke für die Hilfe nur gehts dies bei mir nicht!

        Dafür gibt es verschiedene Gründe, und du kannst keinen davon beeinflussen:

        • Der Webserver sammelt die Ausgabe von PHP trotz flush() erstmal in einem Puffer und sendet sie Seite erst, wenn das Skript fertig ist.

        • Irgenden Proxy auf dem Weg sammelt die Daten, um sie komplett weiterzuleiten.

        • Der Browser sammelt die Daten in einem Puffer, weil er die Seite anders nicht rendern kann.

        Auf keines dieser Probleme kannst du Einfluß nehmen. HTTP ist eben einfach kein Protokoll für Echtzeitkommunikation, sondern nur zum Transport fertiger Webseiten gedacht. Counter, die einen Fortschritt anzeigen, verbieten sich da irgendwie von selbst.

        Wenn ein Vorgang auf dem Server länger benötigt, hast du ohnehin eines  von zwei Problemen (weshalb man seine Arbeit, zumindest diejenige, die mit dem Browser in Verbindung steht, möglichst schnell erledigen sollte):

        1. Der Benutzer bricht den scheinbar endlosen Ladevorgang ab.
        2. Der Vorgang dauert so lange, daß ein Timeout vorher eintritt.

        In diesen Fällen ist es schlauer, mit einer Jobwarteschlange zu arbeiten - diese Möglichkeit hat man auf normalem handelsüblichen Webspace aber üblicherweise nicht. Insofern würde ich auf diese Spielerei einfach verzichten.

        - Sven Rautenberg

        1. naja verzichten kann ich darauf nicht!
          Das komische ist ja wenn ich den script z.b. test.php?action=do direkt starte funktioniert es ja aber wenn ich es vom formular aus start - nicht mehr!!

          Kann man da wirklich nichts mehr machen ?