phpbar.de logo

Mailinglisten-Archive

[php] output GZIP-encoding

[php] output GZIP-encoding

Kai Meder php_(at)_phpcenter.de
Tue, 16 Jul 2002 20:18:43 +0200


> On 2002-07-16 19:26:59, Kai Meder wrote:
> > ich will, bevor ich den cache ausgebe, diesen nochmal für den client
mit
> > gz codieren ...
>
> Mit Cache meinst Du den Inhalt des output buffers?
output einer seite inne text-datei gecached, etc...
also liegt auf dem webserver, ausgeliefert wird für den browser/client

> > auf gz_handler habe ich keine lust, wills selber probieren,
> > dann ist das ganze auch bisschen anpassbarer ...
>
> Ich bin gerade am Testen eines Patches, um zlib.output_compression
> auch etwas anpaßbarer zu machen, braucht aber wohl noch ein bißchen,
> bis ich Zeit finde, das fertig zu testen.
sauba ! ;)

> > aber wie gesagt, keine lust auf den gzhandler ;)
>
> zlib.output_compression ist unabhängig von ob_gzhandler ;-).
hmpf ? kannst du das dann bisschen näher erläutern ?

> > ich habe das so verstanden, dass der output von gzencode und
gzcompress
> > grundlegendend verschieden ist, also nicht nur von den headern
> > unterschiedlich,
> > sondern auch vom algorithmus, etc.. ?
>
> gzencode() verwendet den Deflate-Algorithmis (wie gzdeflate()),
kümmert
> sich aber noch um Header und gegebenenfalls Footer. gzcompress() ist
> leicht anders, aber die Unterschiede liegen auch da eher in der
> Kapselung um die eigentlichen Daten herum (Checksumme o.ä.).

also momentan liefere ich so aus und IE6 akzeptierts klaglos...
laut telnet kommts auch wirklich encodet rüber ...

--- snippet ---
function cache_compress($data)
{
global $CFG;
return "\x1f\x8b\x08\x00\x00\x00\x00\x00".gzcompress($data,
$CFG['cache']['gzip_level']);
}

die funktion ist aus dem cache-modul (header wird seperat gesendet)
IE6 will diesen 8bit header haben und den output von gzcompress ...
(btw, der header sind doch 8 bit oder ? in den annotations vom manual
hat nämlich einer was von 10 bit geschrieben ?! mit 10 bit, also 2x \x00
mehr
am ende wills der IE6 wieder nicht ...)

btw, wenn ich mit substr diesen 4-bit-checksum-fehler am ende
rausschneide,
wie es praktisch jeder in den annotations zu gzcompress macht,
dann will es mein IE6 nicht ...

> > ich will eigentlich nru den gz-compressed output des caches an den
> > client senden ...
>
> Dann nimm gzdeflate() (oder gzcompress()), wenn es nachher nicht als
> .gz verarbeitet werden soll.
ok, das stimmt dann also schonmal ..

aaaaaaber.
was soll dann dieses snippet aus den user annotations ?
--- snippet ---
function gzDocOut() {

      if ($encoding = checkCanGzip()) {
        $contents = ob_get_contents();
        ob_end_clean();
        header("Content-Encoding: ".$encoding);
//        print("\x1f\x8b\x08\x00\x00\x00\x00\x00");
        $contents = gzencode($contents);
//        $contents = substr($contents, 0, strlen($contents) - 4);
        print($contents);
//        print(pack('V', crc32($contents)));
//        print(pack('V', strlen($contents)));
        exit();
      }
      else {
        ob_end_flush();
        exit();
      }

  }

mit dem auskommentierten zeilen will der autor darauf hinweisen,
dass die checksum und size als footer überflüssig geworden sind ..
evntl. weil der autor gzencode statt gzcompress benutzt ?
aber ich benutze ja auch gzcompress ohne diese footer *grübel*

> > hm, wenn gzencode das gleiche wie gzcompress sein sollte, nur
> > mit zusätzlichen headern, dann bietet sich das natürlich an ...
> > sicher, dass gzencode das miterledigt ?
>
> Eigentlich schon ;-). (Aber er läßt die Checksumme bei FORCE_DEFLATE
> weg).
boah, dieser elende gz-mist ;)

> > von bugs.php.net gefunden, da war IIRC ein report dass doch manches
> > in der zlib durcheinander geschmissen wurde ?!
>
> Welcher Bug-Report war das? Das würde mich interessieren.
argl ich schau mal schnell ob ich den finde ...

> Tschüs
>   Stefan
danke stefan !

kai


php::bar PHP Wiki   -   Listenarchive