flush funktioniert nicht...

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

  • flush funktioniert nicht...

    Moin,

    Ich denke dieses ist eines der wenigen Foren, was meine Fragen beantworten kann :-)

    und zwar baue ich einen JavaScript Ladebalken, die Daten werden mittels jQuery UI überprüft, dass zum vorhaben...

    Momentan habe ich eine einfache for Schleife die mir die Daten prompt liefern soll...
    lokal und auf ein paar Server läuft dieses aber nicht überall... ich habe aber leider keine Ahnung, warum dieses nicht überall funktioniert...

    bei denen wo es nicht funktioniert kommt das Ergebnis erst nach einer Zeit ( was mit an der Funktion sleep liegt... )

    hier mal das Script:
    PHP-Code:
    <?php
    ob_implicit_flush
    (1); 
    ob_start();
    for(
    $i 1$i <= 10$i++) {
        echo 
    $i.'0<br>';
        
    ob_flush(); flush();
        
    sleep(1);
    }

    ?>
    dieses Funktioniert nur auf wenigen Webspaces die mir zur verfügungstehen :-/

    getestet in folgenden PHP Versionen:
    - PHP5.2.11-1 (Debian Squeeze, suexec)
    - PHP5.1.2 (SuSE 10.1, mod_php)
    *PHP5.2.10 (Win32 binaries von php.net, als ScripAlias) loacler test

    langsam fällt mir echt nichts mehr ein warum es nicht überall geht :-(

    Gruß
    Gunah

  • #2
    Hallo Gunah,

    ich würde erst mal das ganze Output-Buffering rausnehmen, weil mir das in diesem Falle nicht zielführend erscheint. Der flush-Aufruf kann (soll) drin beliben. Wenn du dann nach dem <br> noch \n (mit double quotes!) ausgibst, "sollte" es funktionieren.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      PHP-Code:
      <?php
      for($i 1$i <= 10$i++) {
          echo 
      $i."0\n";
          
      //ob_flush();
          
      flush();
          
      sleep(1);
      }
      ?>>
      funktioniert, genauso wie vorher auch (egal ob ob_flush() ) vorhanden ist oder nicht...
      unter mod_php geht es ohne Probleme. aber unter SuEXEC macht es nur Probleme, da wird wenn alles auf einmal angezeigt... (Debian Squeeze amd64, PHP vom repo Server, geladen...) nur nach 10 Sekunden halt...

      denke irgendwie, dass es eher ein Problem mit dem PHP Interpreter unter SuEXEC gibt...

      Kommentar


      • #4
        Wenn die Änderung nichts gebracht hat, kannst du sie auch wieder rückgangig machen. Lt. PHP Handbuch sind solche Probleme mit flush sehr weit verbreitet und liegen an der Pufferung des Servers selbst (die man mit PHP nicht verhindern kann) oder des Browsers (z. B. IE).

        Inwiefern es sich lösen ließe, wenn du durch einen bestimmten Content-Type-Header den Server überzeugst, dass es sich um Streaming-Daten handelt, kann ich grad nicht sagen, aber das wäre ein potentieller Ansatz - wenn es auch ein dreckiger Hack bleibt, gegen den mindestens genauso viele Gründe sprächen.

        [COLOR="Red"]Edit:[/COLOR] Ich weiß zwar nicht, ob das auf dein Problem anwendbar ist, aber bei meinem aktuellen Webtop-Projekt habe ich auch Ladefortschrittsbalken. Das realisiere ich so, dass ich den Payload (XML oder JSON) portioniere (z. B. 50 Teile à 2%) und streng seriell mit AJAX lade. Streng seriell bedeutet dabei, dass ein Request erst angestoßen wird, wenn der vorherige beendet ist.

        Gruß,

        Amica
        Zuletzt geändert von AmicaNoctis; 09.10.2009, 11:31.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          danke für deine Antworten,

          habe nochmal weiter geguckt... und es gibt mit einigen Apache Configs wohl Probleme und bei SuEXEC wird die Seite in irgendeiner art gecached und dann erst dem Indianer übermittel, was somit dann ja nicht funktioniert...

          Ich überlege gerade nach einer alternative...
          aber komme irgendwie nicht drauf :-/
          denke werde eine Cache Datei schreiben die von JS abgerufen wird die dieses simuliert und eben in einer schleife ausgeführt wird...

          da viele Hoster, auch aus Sicherheitsgründen, auf SuEXEC setzten...

          Gruß
          Gunah

          Kommentar


          • #6
            Zitat von Gunah Beitrag anzeigen
            Ich überlege gerade nach einer alternative...
            Das Edit zu meinem letzten Beitrag hast du schon gesehen? Manchmal gehen die unter.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Zitat von AmicaNoctis Beitrag anzeigen
              Das Edit zu meinem letzten Beitrag hast du schon gesehen? Manchmal gehen die unter.
              jupp dank dir

              Kommentar


              • #8
                wenn man flushen will wurden früher meist cgi scripte oder light httpd server genutzt um zum beispiel diese damaligen varianten von html chat rooms zu realisieren. das waren seltener apache+php configs, windows und linux verhalten sich hier auch nochmal unterschiedlich.

                mit nem parallelen ajax stream sollte sich das aber schön lösen lassen. es sollten sich im web auch bereits einige fertige progressbar implementierungen finden lassen bei denen du bestimmt etwas abschauen kannst.

                * just my 2 cent ..
                :: BackTix - Textlink Marktplatz
                :: Online PHP Formular Manager & Generator
                :: PHP Gästebuch Script | PHP HTAccess Passwortschutz Generator

                Kommentar


                • #9
                  jop danke für eure Antworten, wie gesagt mache es mit einem Extra Stream (tempfile)... als Basis Framework (JS) nutze ich jQuery... dort ist zwar in den UIs schon eine progressbar vorhanden, aber benötigt, man nicht wirklich, da dieses etwas aufgeblasen ist... mache es daher "manuell"... und lasse einfach nur immer die Breite "width" verändern und sende an einen DIV die Aktuelle Prozentzahl...

                  gruss
                  gunah

                  Kommentar

                  Lädt...
                  X