Valide GZIP Kompression für statische Webseiten
In einem früheren Blogbeitrag (Performancegewinn durch Content-Komprimierung) beschrieb ich, wie man manuell Dateien (z.B. html, css, js, ...) komprimieren kann, falls der Webserver eine automatische Kompression nicht unterstützt. Ich empfahl 7-Zip oder IZArc. Vor kurzem wies mich ein Leser darauf hin, dass auf diese Art komprimierte Inhalte zwar korrekt ausgeliefert und vom Browser korrekt angezeigt werden, sie allerdings von verschiedenen Validatoren bemängelt werden.
Dies sorgt natürlich für Verunsicherung.
Obwohl für GZip einen Standard definiert ist, gibt es Unterschiede nicht nur bezüglich des Kompressionsgrades, sondern auch im Algorithmus generell. Sicherlich kann man nun darüber philosophieren, ob man Webseiten für Besucher / Browser erstellt oder um Validatoren zu befriedigen. Trotzdem hat es immer einen faden Beigeschmack, wenn Validatoren die Webseite bemängeln.
Valide Gzip-Kompression mit PHP
Doch was kann man tun? Ich habe verschiedene Kompressionsstufen und verschiedene Programme probiert (unter Windows). Die Probleme blieben bestehen. Ein Weg, der funktionierte, mit dem sowohl Browser als auch Validatoren zufrieden waren, ist die Gzip-Kompression mit PHP. Nun ist sicherlich nicht jeder Anwender ein Programmierer oder hat das nötige Know-how, um ein entsprechendes Programm zu schreiben. Es ist aber relativ einfach:
- Verzeichnis auslesen
- Dateien mit gewünschten Endungen berücksichtigen (z.B. html, htm, css, js)
- Diese Dateien öffnen und gzip-komprimiert wieder abspeichern.
- Dies möglichst rekursiv, damit man den Schritt nicht für jedes Unterverzeichnis wiederholen muss.
Ich habe die eben aufgelisteten Schritte in einer kleinen PHP-Klasse implementiert. Gern können Sie sich den Sourcecode herunterladen und in Ihrem Projekt verwenden. Beispiele bezüglich Parametrierung sind in der Klasse enthalten.
Es gibt natürlich auch Möglichkeiten, auf diversen Webseiten, wie z.B. auf http://floern.com/tools/codecompressor Dateien online zu komprimieren. Allerdings muss man hier jede Datei einzeln hoch laden, was für größere Websites recht aufwändig ist.