ob_start callback

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

  • ob_start callback

    Hallo,
    Jetzt gerade mit relativ kleiner frage:

    Ist es möglich mit ob_start() auf eine Methode einer Klasse als callback Funktion zurückzugreifen?

    Mein Ansatz war:
    PHP-Code:
    <?php
    class class {
        public function 
    callback($buffer){
        }
    }
    $class = new class;
    ob_start($class->callback());
    ?>
    Da ich so aber von der normalen Schreibweise abweiche, kommt kein Buffer an, zurecht wird mir dann folgendes ausgegeben:
    Warning: Missing argument 1 for error::callback(), called in index.php on line 34 and defined in error.class.php on line 212
    Webdesign und Webentwicklung - Plunix.de

  • #2
    Fast richtig

    ob_start nimmt entweder einen String oder einen Array. Der String muss den Namen der Funktion enthalten, das Array muss eine Kombination aus Namen der Klasse und Namen der Funktion beim Aufruf einer statischen Funktion oder eine Referenz auf das Objekt und den Namen der Funktion enthalten.

    Beispiel:

    PHP-Code:

    class OutputBuffer
    {
        static function 
    parse($string)
        {
            [...]
        }

    }

    ob_start(array('OutputBuffer','parse')); 
    PHP-Code:

    class OutputBuffer
    {
        public function 
    parse($string)
        {
            [...]
        }

    }

    $ob = new OutputBuffer();
    ob_start(array($ob,'parse')); 
    Etwas eleganter lässt sich das sogar direkt im Konstrukor der Pufferklasse erledigen:

    PHP-Code:
    class OutputBuffer
    {
        public function 
    __construct()
        {
            
    ob_start(array(&$this'parse'));
        }
        
        public function 
    parse($string)
        {
            [...]
        }
    }

    new 
    OutputBuffer(); 

    Kommentar


    • #3
      Vielen Dank. Werde Variante 2 Wählen. Mal ein erfahrener Neuling :
      Webdesign und Webentwicklung - Plunix.de

      Kommentar


      • #4
        Hallo nochmal,
        Ich finde die Manual Seite zu ob_start ist äußerst schwach. Deshalb noch einmal eine Frage:

        Lässt sich in dem Array vielleicht auch eine 2. Callbackfunktion unterbringen? Optional möchte ich neben meinem Sicherheitssystem nämlich auch den gz handler mit einbauen.
        Webdesign und Webentwicklung - Plunix.de

        Kommentar


        • #5
          Original geschrieben von Lennie
          Mal ein erfahrener Neuling
          Oktober 2003.

          Kommentar


          • #6
            Lässt sich in dem Array vielleicht auch eine 2. Callbackfunktion unterbringen? Optional möchte ich neben meinem Sicherheitssystem nämlich auch den gz handler mit einbauen.
            Nein, das geht nicht - wenn du mehrere Handler brauchst rufst du ob_start einfach mehrmals auf.
            Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

            Kommentar


            • #7
              Original geschrieben von tontechniker
              Nein, das geht nicht - wenn du mehrere Handler brauchst rufst du ob_start einfach mehrmals auf.
              Habe jetzt direkt hinter meinem Fehlerklassencallback bei ob_start einen ob_start mit callback auf ob_gzhandler, mein Fehlerklassencallback wird dadurch allerdings deaktiviert!

              Ist es möglich den gebufferten Inhalt nochmal zu buffern? Wenn ja: Wird dann dabei die Ausführzeit des Buffers nicht verdoppelt. Wenn nein: Wie hast du es gemeint?

              PHP-Code:
                  ob_start(array('error''ob_callback'));
                  if(
              GZIP == 'true'){
                      
              ob_start("ob_gzhandler");
                  } 
              Das habe ich eben so getestet.
              Webdesign und Webentwicklung - Plunix.de

              Kommentar


              • #8
                Original geschrieben von Lennie
                Habe jetzt direkt hinter meinem Fehlerklassencallback bei ob_start einen ob_start mit callback auf ob_gzhandler, mein Fehlerklassencallback wird dadurch allerdings deaktiviert!

                Ist es möglich den gebufferten Inhalt nochmal zu buffern? Wenn ja: Wird dann dabei die Ausführzeit des Buffers nicht verdoppelt. Wenn nein: Wie hast du es gemeint?

                PHP-Code:
                    ob_start(array('error''ob_callback'));
                    if(
                GZIP == 'true'){
                        
                ob_start("ob_gzhandler");
                    } 
                Das habe ich eben so getestet.
                Das ist schon richtig so, die Handler werden dann rückwärtig zu ihrer Deklaration aufgerufen.

                PHP-Code:
                ob_start('fallback1');

                ob_start('fallback2'); 
                Hier wird zuerst die Funktion fallback2 und danach erst fallback1 aufgerufen.
                Beim gzip Handler kann das evtl problematisch werden, daher würde ich ihn immer zu oberst aufrufen.

                Im übrigen kann es sein, das dein Hoster den Output schon perse zipt, um Traffic zu sparen, in dem Fall macht der gzip Handler natürlich nicht viel Sinn.
                PHP-Code:
                if( !ini_get'zlib.output_compression' ) ) ob_start'ob_gzhandler' ); 
                könnte da Abhilfe schaffen.

                Kommentar


                • #9
                  cool. Danke, werde es mal probieren. Neuling bist du ja doch nicht, sorry.
                  EDIT: Klappt bestens, danke!
                  Webdesign und Webentwicklung - Plunix.de

                  Kommentar


                  • #10
                    Zum Glück sagt Aktivität wenig über Wissen aus

                    Kommentar

                    Lädt...
                    X