Ankündigung

Einklappen
Keine Ankündigung bisher.

Methode als gz_handler?

Einklappen

Neue Werbung 2019

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

  • Methode als gz_handler?

    Hallo zusammen,

    ist es möglich eine Methode einer Klasse als ob_gzhandler zu nutzen?
    (Eine Funktion dafür zu definieren und zu nutzen geht einwandfrei)

    Beispiel:
    PHP-Code:
    <?php
    function newgzhandler($fullOutput) {
        
    $fullOutput preg_replace("/[\s]+/i"" "$fullOutput);
        return 
    gzencode($fullOutput,3);
    }
    ob_start("newgzhandler");      // geht einwandfrei
    ob_start("klasse::methode"); // geht nicht
    ob_start("\$this->methode"); // geht auch nicht
    ?>
    Der Aufruf von ob_start würde in der Klasse stattfinden. Die gewünschte Methode ist in der gleichen Klasse, in der der Aufruf stattfinden soll.

    Zweck des Ganzen:
    1.) Der ob_gzhandler(); von PHP funktioniert bei mir nicht immer richtig.
    2.) Ich möchte im Outputcache noch Whitespaces entfernen

  • #2
    PHP-Code:
    <?php
    $cls 
    = new WasAuchImmer();
    ob_start(array(&$cls"methode")); // PHP4 Safe, PHP5 übergibt Referenzen auf Objekte automatisch
    //oder 

    ob_start(array(&$this"methode"));

    ?>

    Kommentar


    • #3
      Hey Klasse, das scheint tatsächlich zu funktionieren. Danke.
      Allerdings tritt nun ein weiteres Problem auf. Die Methode:
      PHP-Code:
      <?php
      /** Neue Gzhandler, ob_gzhandler weist Fehler auf
       * @param string $fullOutput
       */
      function ob_newgzhandler($fullOutput) { 
      // Whitespaces entfernen
      if($this->getRemoveWhitespaces())
          
      $fullOutput preg_replace("/[\s]+/i"" "$fullOutput);

      if(
      strstr($_SERVER['HTTP_ACCEPT_ENCODING'],"gzip"))
          return 
      gzencode($fullOutput,1);
      else
          return 
      $fullOutput;
      }   
      ?>
      behandelt $fullOutput so, dass ich Zeichensalat beim Aufruf erhalte. Ohne gzencode funktionierts klasse. Gibts da irgendwo ein Beispiel wie man gzippen muss, damit das überall funktioniert?
      BTW:
      Erstaunlicherweise funktioniert der oben genannte code einwandfrei, wenn er sich in einer Funktion und nicht in einer Methode befindet.

      Kommentar


      • #4
        Hi Andreas.

        Setz mal den Header explizit:
        PHP-Code:
        <?php
        header
        ('Content-Encoding: gzip');
        ?>
        Basti

        Kommentar


        • #5
          Eigentlich sollte das der Output Buffer doch selber erledigten oder? Mhh komischerweise gehts so. Alles klar, Problem gelöst. Danke

          Kommentar


          • #6
            Zitat von Andreas
            Eigentlich sollte das der Output Buffer doch selber erledigten oder?
            Woher soll der OB denn wissen, dass du die Daten komprimierst? Woher soll
            gzencode() wissen, dass die komprimierten Daten ausgegeben werden
            sollen? Wer außer dir könnte diesen Job also erledigen, dem Client
            mitzuteilen, dass gleich komprimierte Daten kommen?

            Basti

            Kommentar

            Lädt...
            X