Rafael: PHP, PDF und gzip

Hallo Forum,

ich bin bei leibe kein Experte auf dem Gebiet der gzip-Komprimierung. Habe nun aber einiges gegoogelt auf der Suche nach richtigen Lösungen. Nun habe ich diese Seite gefunden:
http://www.webcodingtech.com/php/gzip-compression.php
die mir eine Methode anrät für die ich mich im Vertrauen nun auch stütze. Für ausgelieferte HTML-Dokumente funktioniert das (hoffe ich) nun auch prima. Wenn ich die dargestellte Funktion aber überprüfe stelle ich fest, dass diese nicht anspringt, wenn ein header mit gesendet wird. Wie zum Beispiel bei meinen Dynamischen PDF-Dokumenten.

Diese zu gzippen wäre mir aber das wichtigste, da die Dokumente teils über 1 MB groß sind. Kann man PDF-Dokumente überhaupt sinnvoll gezippt ausliefern und warum verzichtet diese Funktion darauf?

Danke und Grüße!

  1. Kleine Anmerkung: Die globale Variable ersetzte ich durch getenv();

    1. Hello,

      Kleine Anmerkung: Die globale Variable ersetzte ich durch getenv();

      Im PHP-Manual steht doch auch noch einiges dazu
      http://www.php.net/manual/en/function.gzencode.php

      Unter anderem auch auf http://www.php.net/manual/en/function.gzcompress.php, dass man nicht gzcompress() nehmen soll für die Auslieferung an den Browser (wenn ich das richtig verstanden habe...)

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

    2. Hello,

      kleiner Nachtrag: Dar Apache sollte das eigentlich automatisch mit dem Client aushandeln, ob er comprimiert ausliefern darf.

      http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

  2. Hallo Rafael,

    ich bin bei leibe kein Experte auf dem Gebiet der gzip-Komprimierung. Habe nun aber einiges gegoogelt auf der Suche nach richtigen Lösungen. Nun habe ich diese Seite gefunden:
    http://www.webcodingtech.com/php/gzip-compression.php

    leider sorgt der entsprechende Betreiber der Site mit dem Verlinkungsangebot auch dafür, daß sein _Mist_ wirklich gut bei der Suchmaschinerie gelistet wird. Das auf dem dortigen Dokument beschriebene Script geht nicht mit einer der goldenen Regeln PHPs konform: Konfigurieren statt Programmieren.

    die mir eine Methode anrät für die ich mich im Vertrauen nun auch stütze.

    Das würde ich an Deiner Stelle nicht tun, denn das kleine Script dort macht auch noch zwei weitere logische Fehler...

    Wenn ich die dargestellte Funktion aber überprüfe stelle ich fest, dass diese nicht anspringt, wenn ein header mit gesendet wird. Wie zum Beispiel bei meinen Dynamischen PDF-Dokumenten.

    Ich habe es jetzt nicht ausprobiert, aber ich halte den ersten logischen Fehler des Scriptes (if( headers_sent() ){}) für den Grund dieses Verhaltens.

    Diese zu gzippen wäre mir aber das wichtigste, da die Dokumente teils über 1 MB groß sind. Kann man PDF-Dokumente überhaupt sinnvoll gezippt ausliefern und warum verzichtet diese Funktion darauf?

    Ja, man kann sie, wie Tom bereits anmerke, mit deflate ausliefern.
    Da mod_deflate nicht zu Standardmodulen Apaches gehört, ist es nur logisch, wenn man dies PHP überläßt: http://de3.php.net/manual/de/ref.zlib.php#id6828280

    Konfiguration in der php.ini:

    zlib.output_compression      =1
       zlib.output_compression_level=9

    oder ->
    Konfiguration innerhalb eines Scripts (am Anfang dieses!):

      
       ini_set('zlib.output_compression',1);  
       ini_set('zlib.output_compression_level',9);  
    
    

    Mit der Konfiguration zlib.output_compression wird intern automatisch ein output handler und Ausgabepuffer angelegt. (Das Anlegen eines Ausgabepuffers mit ob_start() wird damit überflüssig.) PHP, so wie oben beschireben konfiguriert, durchsucht dabei die Requestheader nach Accept-Encoding und Komprimiert die Dokumente gegebenenfalls automatisch.

    Daher geht das Script, was Du mit google gefunden hast, völlig fehl und verkompliziert und verwirrt hier unnötig.

    Gruß aus Berlin!
    eddi