CLXXVII. Zlib Komprimierungsfunktionen

Einführung

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

Anmerkung: Mit Version 4.0.4 wurde ein fopen-wrapper für .gz-Dateien eingeführt, so dass Sie die spezielle 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 Abschnitt namens Compression Streams in Anhang M.

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.

Anmerkung: 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.

The zlib extension offers the option to transparently compress your pages on-the-fly, if the requesting browser supports this. Therefore there are three options in the configuration file php.ini.

Tabelle 1. Zlib Configuration Options

NameDefaultChangeableChangelog
zlib.output_compression"0"PHP_INI_ALLAvailable since PHP 4.0.5.
zlib.output_compression_level"-1"PHP_INI_ALLAvailable since PHP 4.3.0.
zlib.output_handler""PHP_INI_ALLAvailable since PHP 4.3.0.
For further details and definitions of the PHP_INI_* constants, see the Anhang G.

Hier eine kurze Erklärung der Konfigurationsoptionen:

zlib.output_compression boolean/integer

Whether to transparently compress pages. If this option is set to "On" in php.ini or the Apache configuration, pages are compressed if the browser sends an "Accept-Encoding: gzip" or "deflate" header. "Content-Encoding: gzip" (respectively "deflate") and "Vary: Accept-Encoding" headers are added to the output. In runtime, it can be set only before sending any output.

This option also accepts integer values instead of boolean "On"/"Off", using this you can set the output buffer size (default is 4KB).

Anmerkung: output_handler must be empty if this is set 'On' ! Instead you must use zlib.output_handler.

zlib.output_compression_level integer

Compression level used for transparent output compression.

zlib.output_handler string

You cannot specify additional output handlers if zlib.output_compression is activated here. This setting does the same as output_handler but in a different order.

Resource Typen

Diese Erweiterung definiert keine Resource-Typen.

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 Test String in die Datei, dann wird der Inhalt dieser Datei zweimal ausgegeben.

Beispiel 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 ausgeben
echo gzread($zp, 3);

// 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
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