Ankündigung

Einklappen
Keine Ankündigung bisher.

"Output-Pufferung spezial...?"

Einklappen

Neue Werbung 2019

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

  • "Output-Pufferung spezial...?"

    Hallo,

    bin gerade an einem Problem dran, wo ich einen speziellen PHP-Code Block puffern muss, aber

    PHP-Code:
    // Block 1
    // hier steht einiges an PHP-Code
    // ...

    // Block 2
    // hier steht der zu puffernde Code
    // ...

    // Block 3
    // hier kommt wieder anderer PHP-Code
    // ... 
    das ganze sieht so wie oben schemenhaft dargestellt aus, d.h. es müssen Block 1 und Block 3 ohne Pufferung sofort ausgegeben werden, nur der Block 2 muss zeitlich verzögert ausgegeben werden.

    Ich kann leider den Block 2 an keine andere Stelle im Script setzen (weil dadurch zig andere PHP-Seiten geändert werden müssten und weil v.a. dadurch meine urpsrüngliche Konzeption nicht mehr geht...)

    Daher kann ich auch nicht sleep(), flush() oder die ob_() Befehle verwenden...

    Ich suche praktisch eine analoge Möglichkeit wie bei JavaScript mit setTimeout() für PHP, vielleicht hat jemand einen Vorschlag. Wär' super.

  • #2
    Verständinsschwierigkeit meinerseits ...

    Ich komme nicht ganz dahinter, was du tun willst ...
    Du willst Block 1 und 3 ausgeben lassen .. und dann Block 2 dazwischen hinterherschieben*?!* ...

    Das ganze scheitert ja schon hieran:
    "Hallo Browser .. da kommt noch was für ungefähr da .. in der Mitte ..."

    Grunstäzliches: Man trenne Logik von Ausgaben und dann sollte das ganze irgendwie richtig rum hinten rauskommen. Dürfte wohl eher unerheblich sein, ob das nun sofort ausgegeben wird, oder gepuffert.

    Kommentar


    • #3
      Stimmt. Am besten lässt sich das mit einer Templateengine realisieren.

      Vermutlich ist was mit deiner Programmierung falsch, ansonsten würde solch ein "Fehler" bzw. notweniger Workarround nie gebraucht werden.

      Kommentar


      • #4
        Hallo,

        Re Verständnis: OK, verstehe ich, da fehlt etwas:

        Block 1 und Block 3 enthalten Content der sofort an den Browser geschickt werden soll (aufbereitet und dargestellt wird das ganze per Template-System, das bei PHP dabei ist, ITX...).

        Block 2 enthält einen Seiten-Redirect mittels header() (und ein paar andere Dinge noch die damit zusammenhängen).
        Was soll überhaupt passieren? Der Inhalt (Block 1 und 2) soll dargestellt werden, dann nach ein paar Sekunden ein automatischer Redirect mittels dem header-Code von statten gehen.

        Wie schon geschrieben ist es nicht gerade einfach diesen Block 2 woanders hinzuverfrachten.

        Etwas klarer?

        Kommentar


        • #5
          Ja, etwas klarer ist es schon.
          Allerdings sobald eine Ausgabe an den Browser gesendet wird, ist eine Weiterleitung per header() nicht mehr möglich. Du könntest das Meta-Tag "Refresh" verwenden.

          Kommentar


          • #6
            Hallo,

            ja das Meta-Tag hab ich noch gar nicht in Erwägung gezogen, danke.

            Kommentar


            • #7
              Das geht schon, und auch wenn er sich am Anfang etwas verwirrend ausgedrückt hat - ich meine sein Problem zu verstehen

              Output-Buffering ist dein Freund - probier mal Folgendes:

              Code:
              // Block 1
              ob_start(); // <- Level 1 Anfang
              print "Ganz viel Content...";
              
              // Block 2
              if ($ich_muss_weg) {
                  Header ( ... );
                  exit;
              } else {
                  ob_start(); // <- Level 2 Anfang
                  print "Nochmal etwas...";
                  $save_block2=ob_get_contents();
                  ob_end_clean(); // <- Level 2 Ende mit Clean
              }
              
              // Block 3
              print "...Seufz - noch mehr Zeugs..";
              
              print "Ich kann jetzt mit 'save_block2' machen was ich will, und zwar _nach_ der Ausgabe der anderen beiden Blöcken. Hier ist es: $save_block2";
              
              ob_end_flush(); // <- Level 1 Ende mit Output
              Grüsse

              Lev

              Kommentar


              • #8
                Hi,

                Danke für Deine Antwort. Schau ich mir später genauer an...

                Ciao,
                Michael

                Kommentar

                Lädt...
                X