Forum und email

Zlib Komprimierungsfunktionen

Einführung

Dieses Modul gibt Ihnen die Möglichkeit, transparent gzip-komprimierte Dateien (*.gz) zu lesen und zu schreiben. Hierfür bietet die Erweiterung die Versionen der meisten Dateisystem-Funktionen, die mit gzip-komprimierten (und unkomprimierten) Dateien, jedoch nicht mit Sockets funktionieren.

Hinweis: Mit Version 4.0.4 wurde ein fopen-wrapper für .gz-Dateien eingeführt, so dass Sie den speziellen zlib:-URL verwenden können, um auf komprimierte Dateien transparent über die f*()-Dateifunktionen zuzugreifen. Beim Aufruf von fopen() müssen Sie dazu lediglich vor dem Dateinamen das Präfix zlib: schreiben. Diese Möglichkeit erfordert eine C-Laufzeitbibliothek, die die fopencookie()-Funktion bereitstellt. Nach aktuellem Stand scheint die GNU libc die einzige Bibliothek zu sein, die dieses Feature bereitstellt.
In PHP 4.3.0 wurde zlib: in compress.zlib:// geändert, um Konflikte mit Dateinamen zu vermeiden die ':' Zeichen enthalten. Die fopencookie() Funktion wird nicht mehr benötigt. Mehr Information hierzu finden Sie im Abschnitt über Compression Streams.

Anforderungen

Diese Erweiterung nutzt die Funktionen der » zlib-Bibliothek von Jean-loup Gailly und Mark Adler. Sie benötigen zlib >= 1.0.9, um die Funktionen nutzen zu können.

Installation

Die Unterstützung für zlib ist in PHP nicht standardmäßig aktiviert. Es ist erforderlich, die Option --with-zlib[=DIR] beim Kompilieren von PHP anzugeben.

Die Windowsversion von PHP enthält diese Erweiterung. Um diese Funktionen zu verwenden, müssen Sie keine zusätzlichen Erweiterungen aktivieren.

Hinweis: Die integrierte Unterstützung für zlib in der Windowsversion steht ab PHP 4.3.0 zur Verfügung.

Laufzeit Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

Die zlib-Erweiterung gibt Ihnen die Möglichkeit, Ihre Seiten on-the-fly transparent zu komprimieren, wenn der Browser dies unterstützt. Dafür gibt es drei Optionen in der Konfigurationsdatei php.ini.

Zlib-Konfigurationsoptionen
Name Standardwert Veränderbar Changelog
zlib.output_compression "0" PHP_INI_ALL Verfügbar seit PHP 4.0.5.
zlib.output_compression_level "-1" PHP_INI_ALL Verfügbar seit PHP 4.3.0.
zlib.output_handler "" PHP_INI_ALL Verfügbar seit PHP 4.3.0.
Weitere Details und die Definitionen der PHP_INI_*-Konstanten finden Sie im php.ini Einstellungen.

Hier eine kurze Erklärung der Konfigurationsoptionen:

zlib.output_compression boolean/integer

Wenn diese Option in der php.ini oder der Apachekonfiguration auf "On" gesetzt ist, werden die Seiten komprimiert, wenn der Browser einen "Accept-Encoding: gzip"- oder einen "deflate"-Header sendet. Zu den normalerweise vom Server gesendeten Headern werden nun "Content-Encoding: gzip" (respektive "deflate") und "Vary: Accept-Encoding" hinzugefügt. Zur Laufzeit kann die Option nur gesetzt werden, bevor irgendeine Ausgabe gesendet wurde.

Diese Option akzeptiert auch Integerwerte anstelle des boolschen On/Off, wenn Sie diese verwenden, können Sie die Ausgabepuffergröße festlegen (der Standardwert ist 4KB).

Hinweis: output_handler muss leer sein, wenn diese Option den Wert "On" hat! Verwenden Sie statt dessen zlib.output_handler.

zlib.output_compression_level integer

Der Kompressionsgrad für die transparente Ausgabekomprimierung.

zlib.output_handler string

Sie können keine zusätzlichen Outputhandler angeben, wenn Sie zlib.output_compression aktiviert haben. Diese Einstellung tut das Gleiche wie output_handler, allerdings in einer anderen Reihenfolge.

Resource Typen

Die Extension definiert eine Filepointer-Ressource, die von gzopen() zurückgegeben wird.

Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

FORCE_GZIP (integer)
FORCE_DEFLATE (integer)

Beispiele

Dieses Beispiel öffnet eine temporäre Datei und schreibt einen Teststring in die Datei, dann wird der Inhalt dieser Datei zweimal ausgegeben.

Example#1 Ein kleines Beispiel zu Zlib

<?php

$filename 
tempnam('/tmp''zlibtest') . '.gz';
echo 
"<html>\n<head></head>\n<body>\n<pre>\n";
$s "Nur ein test, test, test, test, test, test, test, test!\n";

// Temporäre Datei zum Schreiben mit der maximalen Kompressionsstufe öffnen
$zp gzopen($filename"w9");

// String in die Datei schreiben
gzwrite($zp$s);

// Datei schließen
gzclose($zp);

// Datei zum Lesen öffnen
$zp gzopen($filename"r");

// 3 Zeichen einlesen und ausgeben
echo gzread($zp3);

// Inhalt der Datei ausgeben und die Datei schließen
gzpassthru($zp);
gzclose($zp);

echo 
"\n";

// Öffne die Datei und gib den Inhalt zum zweiten Mal aus
if (readgzfile($filename) != strlen($s)) {
        echo 
"Error with zlib functions!";
}
unlink($filename);
echo 
"</pre>\n</body>\n</html>\n";

?>

Inhaltsverzeichnis

  • gzclose — Close an open gz-file pointer
  • gzcompress — Compress a string
  • gzdecode — Decodes a gzip compressed string
  • gzdeflate — Deflate a string
  • gzencode — Create a gzip compressed string
  • gzeof — Test for end-of-file on a gz-file pointer
  • gzfile — Read entire gz-file into an array
  • gzgetc — Get character from gz-file pointer
  • gzgets — Get line from file pointer
  • gzgetss — Get line from gz-file pointer and strip HTML tags
  • gzinflate — Inflate a deflated string
  • gzopen — Open gz-file
  • gzpassthru — Output all remaining data on a gz-file pointer
  • gzputs — Alias von gzwrite
  • gzread — Binary-safe gz-file read
  • gzrewind — Rewind the position of a gz-file pointer
  • gzseek — Seek on a gz-file pointer
  • gztell — Tell gz-file pointer read/write position
  • gzuncompress — Uncompress a compressed string
  • gzwrite — Binary-safe gz-file write
  • readgzfile — Output a gz-file
  • zlib_get_coding_type — Returns the coding type used for output compression