Signatur
Beschreibung
zip_entry_filesize() ermittelt die originale, unkomprimierte Dateigröße eines Eintrags innerhalb eines ZIP-Archivs. Der Rückgabewert entspricht der Größe der Datei vor der Komprimierung, also der Menge an Bytes, die beim vollständigen Entpacken des Eintrags anfallen würde.
Die Funktion gehört zur älteren, prozeduralen ZIP-API von PHP und wird zusammen mit Funktionen wie zip_open(), zip_read() und zip_entry_open() eingesetzt. Für neue Projekte empfiehlt sich stattdessen die objektorientierte Klasse ZipArchive, die deutlich mehr Funktionalität und eine modernere Schnittstelle bietet.
Der Wert von zip_entry_filesize() ist nützlich, um vor dem Lesen eines Eintrags via zip_entry_read() die korrekte Bytezahl zu ermitteln – denn zip_entry_read() erwartet als zweiten Parameter die Anzahl der zu lesenden Bytes. Wird zip_entry_filesize() als Lesegröße übergeben, stellt man sicher, dass der gesamte Inhalt des Eintrags in einem Aufruf gelesen wird.
Hinweis: Diese Funktion ist als deprecated einzustufen und steht nur noch in PHP-Versionen zur Verfügung, die die alte zip_*-Funktionsfamilie unterstützen. Ab PHP 8.0 ist die Erweiterung weiterhin vorhanden, jedoch sollte auf ZipArchive migriert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $zip_entry Pflicht | resource | Ein gültiges ZIP-Eintrags-Resource-Handle, das zuvor durch zip_read() ermittelt und mit zip_entry_open() geöffnet wurde. |
Rückgabewert
0 zurück, wenn der Eintrag ein Verzeichnis ist oder die Größe nicht ermittelt werden kann.Beispiele
Kompletten Inhalt eines ZIP-Archivs auslesen
<?php
$zip = zip_open('/pfad/zum/archiv.zip');
if (is_resource($zip)) {
while ($entry = zip_read($zip)) {
$name = zip_entry_name($entry);
$size = zip_entry_filesize($entry);
echo "Dateiname: $name | Unkomprimierte Größe: $size Bytes\n";
if (zip_entry_open($zip, $entry, 'r')) {
// Gesamten Inhalt auf einmal lesen
$inhalt = zip_entry_read($entry, $size);
zip_entry_close($entry);
// $inhalt enthält nun den vollständigen Dateiinhalt
}
}
zip_close($zip);
} else {
echo "Fehler beim Öffnen des ZIP-Archivs.\n";
}
?>
Alternativer Ansatz mit ZipArchive (empfohlen)
<?php
// Moderne Alternative mit ZipArchive statt zip_entry_filesize()
$zip = new ZipArchive();
if ($zip->open('/pfad/zum/archiv.zip') === true) {
for ($i = 0; $i < $zip->numFiles; $i++) {
$stat = $zip->statIndex($i);
echo "Dateiname: {$stat['name']} | Unkomprimierte Größe: {$stat['size']} Bytes\n";
}
$zip->close();
} else {
echo "Fehler beim Öffnen des ZIP-Archivs.\n";
}
?>
// Wichtig · Fallstricke
Deprecation: Die gesamte prozedurale zip_*-Funktionsfamilie gilt als veraltet. Für neue Projekte und bei Migrationen sollte ausschließlich ZipArchive verwendet werden, da diese Klasse aktiv gepflegt wird und mehr Funktionen bietet.
Verzeichniseinträge: Für Einträge, die Verzeichnisse repräsentieren (erkennbar am abschließenden / im Namen), gibt die Funktion 0 zurück, da Verzeichnisse keine eigene Datei-Nutzlast besitzen.
Große Dateien: Auf 32-Bit-Systemen kann der zurückgegebene Integer-Wert bei Dateien über 2 GB überlaufen. Für solche Fälle ist ZipArchive::statIndex() robuster.