Per passthru(); text direkt an Browser senden, nicht abwarten bis Skript fertig

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

  • Per passthru(); text direkt an Browser senden, nicht abwarten bis Skript fertig

    Hallo,

    wie bekomm ich folgendes Hin:

    PHP-Code:
    <?php ini_set("implicit_flush""On");
    passthru('echo Test; sleep 3; echo Test2; sleep 3; echo Test3'); ?>
    Nur statt dass er mir nach 6 sekunden alles gleichzeitig ausgibt, soll er mir alles einzeln ausgeben. Geht soetwas? Bin dankbar für Antworten .

  • #2
    Das wird so nicht gehen. PHP wird serverseitig interpretiert, das was du zu sehen bekommst wird an den Client geschickt. Das passiert aber erst, sobald das Skript komplett durchgelaufen ist. Mir wäre keine Möglichkeit bekannt, das zu ändern.

    Kommentar


    • #3
      Hallo,

      also ich kann mich errinern dass ich vor ein paar jahren 3 echos hatte und die mir nacheinander ausgegeben wurden. Und nicht alle aufeinmal .

      Kommentar


      • #4
        Also der Hinweis im Manual
        Hinweis: Falls Sie diese Funktion benutzen, um ein Programm zu starten und im Hintergrund weiterlaufen lassen möchten, müssen Sie sicherstellen, dass die Ausgabe des Programms in eine Datei oder einen anderen Ausgabestream umgeleitet wird. Anderenfalls wird PHP solange hängen, bis das Programm zu Ende ausgeführt wurde.
        Deutet darauf hin, dass php erst weiter arbeitet. wenn das Programm abgearbeitet wurde. Daher auch erst die Ausgabe nachdem alles ausgeführt wurde.

        Kommentar


        • #5
          also ich kann mich errinern dass ich vor ein paar jahren 3 echos hatte und die mir nacheinander ausgegeben wurden. Und nicht alle aufeinmal .
          Vielleicht hast du passthru mehrfach aufgerufen?

          oder gar nicht verwendet?

          In deinem Beispiel sehe ich auch keinen Sinn für die Verwendung, aber das liegt sicher daran, dass es nur ein Beispiel ist.

          Kommentar


          • #6
            Hallo,



            Original geschrieben von TobiaZ
            Vielleicht hast du passthru mehrfach aufgerufen?
            Nene, das war iwas mit echo "Test 1"; flush(); echo "Test 2";..

            Zu dem Thema mit in Datei umleiten:

            PHP-Code:
                                    $descriptorspec = array(
                                    
            => array("pipe","r"),
                                    
            => array("pipe","w"),
                                    
            => array("file","./error.log","a")
                                    ) ;

                                    
            // define current working directory where files would be stored
                                    
            $cwd './' ;
                                    
            // open process /bin/sh
                                    
            $process proc_open('/bin/sh'$descriptorspec$pipes$cwd) ;

                                    if (
            is_resource($process)) {

                                        
            // anatomy of $pipes: 0 => stdin, 1 => stdout, 2 => error log
                                        
            fwrite($pipes[0], 'optipng -o7 ' $uploadDir md5($_FILES['file']['name']) . '.png') ;
                                        
            fclose($pipes[0]) ;

                                        
            // print pipe output
                                        
            echo stream_get_contents($pipes[1]) ;

                                        
            // close pipe
                                        
            fclose($pipes[1]) ;

                                        
            // all pipes must be closed before calling proc_close.
                                        // proc_close() to avoid deadlock
                                        
            proc_close($process) ;
                                    } 
            Funzt auch nit so wie ich will . Hab das auf php.net gefunden, wurde da angegeben.

            Geht da mit PHP echt nicht o.O Wäre sau schade wenn nicht...

            Kommentar


            • #7
              Nene, das war iwas mit echo "Test 1"; flush(); echo "Test 2";..
              Sag ich doch:
              oder gar nicht verwendet?

              Kommentar


              • #8
                Hallo,

                naja, ich hab deinen Beitrag nicht gelesen da er noch hinterherkam.

                Weißt du / iwer anders eine Methode wie man mein Problem lösen kann oder muss ich mal wieder auf was anderes ausweichen :-/?

                Kommentar


                • #9
                  [ot]
                  naja, ich hab deinen Beitrag nicht gelesen da er noch hinterherkam.
                  Wie kann man ihn zitieren, wenn man ihn nicht gelesen hat? [ot]

                  Weißt du / iwer anders eine Methode wie man mein Problem lösen kann oder muss ich mal wieder auf was anderes ausweichen :-/?
                  Wir wissen ja nichtmal was du konkret vor hast.

                  Kommentar


                  • #10
                    Hallo,

                    oh, dann hab ich ihn wohl nicht ganz gelesen.

                    Wsa ich will? "optipng -o7 filename.png" ausführen und am besten jede einzelne Zeile angezeigt bekommen und nicht erst nach ende des optipng den ganzen Output.

                    So in etwa sieht der Output aus:
                    http://rafb.net/p/naed6h51.html

                    Damit ich halt sehe wie weit das Skript bisher ist.

                    Kommentar


                    • #11
                      Hallo,

                      PHP-Code:
                      $handle popen("/usr/bin/optipng -o7 -k desktop_290620008.png 2>&1"'r');
                      while(!
                      feof($handle)) {
                          
                      $buffer fgets($handle1024);
                          echo 
                      "$buffer";
                          
                      ob_flush();
                          
                      flush();
                      }
                      pclose($handle); 
                      Geht.

                      Damit werden allerdings 1024 byte ausgegeben. Wenn ichs niedriger stelle sind es trotzdem 1024... hm :-/.

                      EDIT: Liegt vermutlich an optipng.. denn mit ls -al etc. funktioniert es komischerweise.. hm..
                      Zuletzt geändert von ; 27.08.2008, 02:12.

                      Kommentar

                      Lädt...
                      X