davidp: Kann man eine Ausgabe während einer PHP Schleife machen?

Hi,

Ich möchte wissen, ob und wie man eine Ausgabe während einer PHP Schleife machen kann.
Ich habs noch nicht geschafft...

--  
lg davidp
  1. Hello,

    Ich habs noch nicht geschafft...

    du scheiterst woran??

    while (1 == 1) {  
       echo "ich schreibe so lange, bis maximum execution time erreicht...";  
    }
    

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    We found ourselves looking upon a familiar sight. We were home. How do you pick up the threads of an old life? How do you go on... when in your heart you begin to understand... there is no going back? There are somethings that time cannot mend... some hurts that go too deep... that have taken hold.  --  The Lord of the Rings: The Return of the King (Peter Jackson)
    1. hi,

      Ich habs noch nicht geschafft...
      du scheiterst woran??

      Ich brauch das ganze mit der Funktion sleep() und aus einer Datei lesen, da gehts dann nicht mehr:

      while (1 == 1) {  
      $fp = fopen ('datei.txt', 'r' );  
      $inhalt = fread ($fp, filesize ('datei.txt') );  
      fclose ($fp);  
      echo $inhalt . '<br>';  
      sleep(2);  
      }
      
      1. da gehts dann nicht mehr:

        Und was genau bedutet das, wie äußert sich das?

        while (1 == 1) {

        $fp = fopen ('datei.txt', 'r' );
        $inhalt = fread ($fp, filesize ('datei.txt') );
        fclose ($fp);
        echo $inhalt . '<br>';
        sleep(2);
        }

          
        Ist es das was Du willst, immer wieder den ganzen Inhalt ausgeben, bis das script wegen timeoute abgebrochen wird?
        
        1. Hi,

          Ist es das was Du willst, immer wieder den ganzen Inhalt ausgeben, bis das script wegen timeoute abgebrochen wird?

          eher nicht, nur ausgeben, wenn sich in der zeit was in der datei ändert
          (so überprüfen:
          if ($inhalt_alt != $inhalt || $inhalt_alt == "") { echo $inhalt; $inhalt_alt = $inhalt; };
          )

          1. Du willst ein script aufrufen, das eine Datei immer und immer wieder einließt und dann irgendwann, falls sich die Datei ändert oder das script mit timoute abgebrochen wird, ausgibt?

            Das glaube ich nicht.

            1. "oder das script mit timoute abgebrochen wird"
              Das gehört natürlich ans Ende des Satzes.

            2. Du willst ein script aufrufen, das eine Datei immer und immer wieder einließt und dann irgendwann, falls sich die Datei ändert oder das script mit timoute abgebrochen wird, ausgibt?

              Das glaube ich nicht.

              warum denn nicht?

              1. Du willst ein script aufrufen, das eine Datei immer und immer wieder einließt und dann irgendwann, falls sich die Datei ändert oder das script mit timoute abgebrochen wird, ausgibt?

                Das glaube ich nicht.

                warum denn nicht?

                Weil das etwas wäre, was man für kaum etwas verwenden kann und falls es doch für so einen Fall gedacht ist, wo man es verwenden kann, ist es eine reichlich schlechte Lösung.

        2. Hello,

          da gehts dann nicht mehr:

          Und was genau bedutet das, wie äußert sich das?

          while (1 == 1)
          {
              clearstatcache();      ## das wird hier notwednig sein, wenn die Größe der Datei sich
                                     ## während der Scriptlaufzeit ändert.
                                     ## [link:http://www.php.net/manual/de/function.clearstatcache.php]

          $fp = fopen ('datei.txt', 'r' );
          $inhalt = fread ($fp, filesize ('datei.txt') );
          fclose ($fp);
          echo $inhalt . '<br>';
          sleep(2);
          }

          
          >   
          > Ist es das was Du willst, immer wieder den ganzen Inhalt ausgeben, bis das script wegen timeoute abgebrochen wird?  
          
          Liebe Grüße aus Syburg bei Dortmund  
            
          Tom vom Berg  
          ![](http://selfhtml.bitworks.de/Virencheck.gif)  
            
          
          -- 
          Nur selber lernen macht schlau  
          <http://bergpost.annerschbarrich.de>
          
      2. Hi!

        Das:

          
        while (1 == 1)  
        
        

        war nur die Demo einer Endlosschleife - da PHP-Scripte i.d.R. nicht so alt werden, kann man das abwarten..

        Außerdem ist für dein Vorhaben fgets nicht dein Freund!

        Wenn ich jetzt nix übersehen habe...

          
        // Dieser PP-code ist ungetestet!!  
        // Datei zum lesen öffnen - $fp ist unser Handle  
        $fp = fopen ('datei.txt', 'r' );  
          
        // jetzt lesen wir bis zum Dateiende jede Zeile ein  
        // und speichern diese in $inhalt - max. 2kB  
          
        while ($inhalt = fgets($fp, 2048 ) ) {  
          
           // und geben jede Zeile aus  
           print $inhalt;  
        } // wer hat an der Uhr gedreht?  
        
        

        Et alors?

        Die PHP-Dateisystem-Funktionen sind hier sehr gut beschrieben.

        off:PP

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
        1. Hi,

            
          
          > $fp = fopen ('datei.txt', 'r' );  
          > while ($inhalt = fgets($fp, 2048 ) ) {  
          > print $inhalt;  
          > }  
          
          

          das funktioniert ja, aber mit dem Überprüfen (

          if($inhalt!=$inhalt_alt) { print $inhalt . '<br>'; $inhalt_alt=$inhalt; }

          ) gibt er $inhalt erst am schluss (nach 30 sek) aus. warum?

          1. echo $begrüßung;

            Ich weiß ja nicht, warum du den Serverprozess künstlich verlangsamst, aber ...

            [...] print $inhalt [...]
            gibt er $inhalt erst am schluss (nach 30 sek) aus. warum?

            ... PHP sendet nicht sofort jedes Fitzel Daten, das es ausgeben soll, an den Client, sondern wartet erst bis sich ein Puffer gefüllt hat. Wenn du die Ausgabe sofort zum Client senden möchtest, kannst du mittels flush() bitten, den Puffer in Richtung Webserver zu entleeren. Einige Webserver machen dabei aber nicht mit. Auch einige Browser rendern nicht immer sofort jedes Datenpaket nach Empfang. Zusammengefasst hast du also PHP, den Webserver und den Client, die zwischenpuffern können, bevor eine Ausgabe sichtbar wird.

            echo "$verabschiedung $name";

            1. Hello,

              Zusammengefasst hast du also PHP, den Webserver und den Client, die zwischenpuffern können, bevor eine Ausgabe sichtbar wird.

              Und was ist mit "Wolfgang"?
              Der sitzt doch auch noch auf der Leitung und kann ein paar Millisekunden brauchen, bis er alles gelesen hat.

              Gemeint sind natürlich die Proxies und Hobs in der Übertragungsstrecke.
              Die Datenpakete müssen also gar nicht in der Absendereihenfolge ankommen.

              Liebe Grüße aus Syburg bei Dortmund

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Die Datenpakete müssen also gar nicht in der Absendereihenfolge ankommen.

                Falsche Baustelle. Wenn ich bei einer bestehenden TCP/IP-Verbindung vorn "XYZ" reinstecke, kommt hinten auch "XYZ" wieder raus, in der gleichen Reihenfolge. Dass die Daten zwischendurch ein wenig durcheinandergewirbelt werden (Reihenfolge vertauschen, etwas geht verloren, Dopplungen) ist für diesen Zusammenhang irrelevant.

                --
                Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
                Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|
                1. Hello,

                  Die Datenpakete müssen also gar nicht in der Absendereihenfolge ankommen.

                  Falsche Baustelle. Wenn ich bei einer bestehenden TCP/IP-Verbindung vorn "XYZ" reinstecke, kommt hinten auch "XYZ" wieder raus, in der gleichen Reihenfolge. Dass die Daten zwischendurch ein wenig durcheinandergewirbelt werden (Reihenfolge vertauschen, etwas geht verloren, Dopplungen) ist für diesen Zusammenhang irrelevant.

                  Also doch richtige Baustelle: Solange X und Y nicht am Ziel angekommen sind, wird Z nicht ausgegeben. Wenn Wolfgang für X und Y etws länger braucht (Z hat er leider gar nicht zu sehen bekommen, weil das über eine andere Route gelaufen ist *g*) wird eben Z solange im TCP-Stack (oder wo es sonst zu landen hat) des Empfängers zwischengespeichert, bis sie auch eingetrudelt sind.

                  Liebe Grüße aus Syburg bei Dortmund

                  Tom vom Berg

                  --
                  Nur selber lernen macht schlau
                  http://bergpost.annerschbarrich.de
    2. Hello,

      Ich habs noch nicht geschafft...
      du scheiterst woran??

      while (1 == 1) {

      echo "ich schreibe so lange, bis maximum execution time erreicht...";
      }

        
      Das kann aber ganz schön lange dauern, da die typischen 30 Sekunden reine Script-Laufzeit (Rechenzeit) sind und nicht die tatsächliche Zeitdifferenz zwischen Scriptstart und Scriptende.  
        
        
        
        
      Liebe Grüße aus Syburg bei Dortmund  
        
      Tom vom Berg  
      ![](http://selfhtml.bitworks.de/Virencheck.gif)  
        
      
      -- 
      Nur selber lernen macht schlau  
      <http://bergpost.annerschbarrich.de>
      
      1. deshalb vermutlich

        echo "ich schreibe so lange, bis maximum execution time erreicht...";