Signatur
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);
?>
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;
?>
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);
?>
// 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 interngzopen()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.