Start · Sprachen · PHP · Referenz · zlib://

zlib://

Funktion

Stream-Wrapper für transparente Lese- und Schreiboperationen auf zlib-komprimierten Datenströmen (gzip/zlib).

seit PHP 4.3.0 Kategorie: misc

Signatur

zlib://

Beschreibung

Der zlib://-Stream-Wrapper ermöglicht das transparente Lesen und Schreiben von komprimierten Daten im zlib-Format. Er ist Teil von PHPs Stream-Wrapper-Konzept und kann überall dort eingesetzt werden, wo PHP normale Streams akzeptiert – also in Funktionen wie fopen(), file_get_contents(), stream_copy_to_stream() und vielen mehr.

Es gibt drei Varianten dieses Wrappers: zlib:// (allgemeiner Wrapper), compress.zlib:// für gzip-kompatible Dateien (entspricht gzopen()) und compress.bzip2:// für bzip2-Dateien. Der compress.zlib://-Wrapper ist besonders praktisch, da er gzip-Dateien (.gz) direkt lesen und schreiben kann, ohne dass man explizit die gz-Funktionen aufrufen muss.

Typische Anwendungsfälle sind das Einlesen großer komprimierter Log- oder Datendateien, das Schreiben komprimierter Ausgaben sowie das Weiterleiten komprimierter Datenströme. Da der Wrapper transparent arbeitet, muss der Code nicht zwischen komprimierten und unkomprimierten Quellen unterscheiden.

Hinweis: Die zlib-Erweiterung muss in der PHP-Installation aktiviert sein. Für bzip2-Unterstützung ist zusätzlich die bz2-Erweiterung notwendig.

Beispiele

Komprimierte Datei lesen mit compress.zlib://

<?php
// Eine gzip-komprimierte Datei transparent einlesen
$inhalt = file_get_contents('compress.zlib:///var/log/syslog.gz');
echo substr($inhalt, 0, 200);
?>
(erste 200 Zeichen des dekomprimierten Log-Inhalts)

Komprimierte Datei schreiben mit compress.zlib://

<?php
// Daten komprimiert in eine Datei schreiben
$fp = fopen('compress.zlib://ausgabe.gz', 'wb');
if ($fp === false) {
    die('Datei konnte nicht geöffnet werden.');
}
fwrite($fp, "Zeile 1: Hallo Welt\n");
fwrite($fp, "Zeile 2: Dies ist komprimiert.\n");
fclose($fp);

// Direkt wieder einlesen
$gelesen = file_get_contents('compress.zlib://ausgabe.gz');
echo $gelesen;
?>
Zeile 1: Hallo Welt Zeile 2: Dies ist komprimiert.

Komprimierten Stream in unkomprimierte Datei kopieren

<?php
// Komprimierte Quelle in dekomprimierte Zieldatei kopieren
$quelle = fopen('compress.zlib://daten.gz', 'rb');
$ziel   = fopen('daten.txt', 'wb');

if ($quelle && $ziel) {
    stream_copy_to_stream($quelle, $ziel);
    echo "Entpackt und gespeichert.\n";
}

fclose($quelle);
fclose($ziel);
?>
Entpackt und gespeichert.

// Wichtig · Fallstricke

Wichtig: Der einfache zlib://-Wrapper wurde in PHP 5.1.0 durch compress.zlib:// und compress.bzip2:// ersetzt, da der alte Name zu Konflikten mit Dateinamen führen konnte, die :// enthalten. Es empfiehlt sich daher, stets compress.zlib:// zu verwenden.

  • compress.zlib:// – gzip-kompatibel, entspricht intern gzopen()
  • compress.bzip2:// – bzip2-kompatibel, erfordert die bz2-Erweiterung

Beim Schreiben von Dateien sollte der Modus explizit angegeben werden ('wb' für binäres Schreiben), um plattformübergreifende Probleme (Windows-Zeilenenden) zu vermeiden. Remote-URLs können in Kombination mit diesen Wrappern verwendet werden, sofern allow_url_fopen in der php.ini aktiviert ist – das sollte aus Sicherheitsgründen jedoch nur gezielt erfolgen.