Signatur
Beschreibung
zip_entry_read() liest bis zu $length Bytes aus einem zuvor mit zip_entry_open() geöffneten ZIP-Eintrag und gibt die gelesenen Daten als Zeichenkette zurück. Die Funktion gehört zur älteren, prozeduralen ZIP-API von PHP und wird typischerweise in einer Schleife verwendet, um den vollständigen Inhalt einer Datei innerhalb eines ZIP-Archivs zu extrahieren.
Der Parameter $zip_entry muss ein gültiges Eintrags-Handle sein, das zuvor durch zip_read() ermittelt und mit zip_entry_open() geöffnet wurde. Der optionale Parameter $length gibt die maximale Anzahl an dekomprimierten Bytes an, die gelesen werden sollen; standardmäßig sind das 1024 Bytes.
Um den vollständigen Inhalt eines Eintrags zu lesen, empfiehlt es sich, zip_entry_filesize() zu verwenden und diesen Wert als $length zu übergeben. Alternativ kann der Inhalt schrittweise in einer Schleife gelesen werden, bis die Funktion einen leeren String oder false zurückgibt.
Hinweis: Diese prozedurale API gilt als veraltet. Für neue Projekte sollte stattdessen die objektorientierte Klasse ZipArchive verwendet werden, die mehr Funktionalität und bessere Fehlerbehandlung bietet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $zip_entry Pflicht | resource | Ein gültiges ZIP-Eintrags-Handle, das zuvor durch zip_read() erzeugt und mit zip_entry_open() geöffnet wurde. |
|
| $length | int | 1024 | Die maximale Anzahl an Bytes, die aus dem dekomprimierten Inhalt des Eintrags gelesen werden sollen. Um den gesamten Inhalt auf einmal zu lesen, kann der Rückgabewert von zip_entry_filesize() übergeben werden. |
Rückgabewert
false zurück, wenn ein Fehler auftritt, z. B. wenn der Eintrag nicht geöffnet wurde.Beispiele
Vollständigen Inhalt einer Datei aus einem ZIP-Archiv lesen
<?php
$zip = zip_open('/pfad/zum/archiv.zip');
if (is_resource($zip)) {
while ($entry = zip_read($zip)) {
$name = zip_entry_name($entry);
echo "Datei: " . $name . "\n";
if (zip_entry_open($zip, $entry, 'r')) {
// Gesamte unkomprimierte Größe ermitteln
$size = zip_entry_filesize($entry);
if ($size > 0) {
$inhalt = zip_entry_read($entry, $size);
echo "Inhalt (" . strlen($inhalt) . " Bytes):\n";
echo $inhalt . "\n";
}
zip_entry_close($entry);
}
}
zip_close($zip);
} else {
echo "Fehler beim Öffnen des ZIP-Archivs.\n";
}
?>
Inhalt schrittweise in einer Schleife lesen
<?php
$zip = zip_open('/pfad/zum/archiv.zip');
if (is_resource($zip)) {
$entry = zip_read($zip);
if ($entry && zip_entry_open($zip, $entry)) {
$inhalt = '';
// Schrittweise je 512 Bytes lesen
while ($chunk = zip_entry_read($entry, 512)) {
$inhalt .= $chunk;
}
echo "Gelesener Inhalt:\n" . $inhalt . "\n";
zip_entry_close($entry);
}
zip_close($zip);
}
?>
// Wichtig · Fallstricke
Veraltete API: Die prozedurale ZIP-Erweiterung (zip_open, zip_read, zip_entry_read usw.) gilt als veraltet und könnte in zukünftigen PHP-Versionen entfernt werden. Für neue Projekte sollte die Klasse ZipArchive bevorzugt werden.
Speicher: Beim Lesen sehr großer Dateien aus ZIP-Archiven sollte der Inhalt schrittweise (in Chunks) verarbeitet werden, anstatt die gesamte Datei auf einmal in den Speicher zu laden, um Speicherprobleme zu vermeiden.
Reihenfolge: zip_entry_read() darf erst nach einem erfolgreichen Aufruf von zip_entry_open() aufgerufen werden; andernfalls gibt die Funktion false zurück.