zip_entry_filesize()
Die Funktion zip_entry_filesize() gibt die unkomprimierte Größe einer Datei in einem ZIP-Archiv zurück. Seit PHP 8.1 entfernt.
Die Funktion zip_entry_filesize() war eine eingebaute PHP-Funktion, die die unkomprimierte (ursprüngliche) Größe einer einzelnen Datei in einem ZIP-Archiv in Bytes zurückgab. Sie arbeitete zusammen mit der alten prozeduralen ZIP-API (zip_open(), zip_read() und zip_entry_open()).
zip_entry_filesize() wurde in PHP 8.0 als veraltet markiert und in PHP 8.1 entfernt. Sie existiert in modernem PHP nicht mehr. Neuer Code sollte stattdessen die Klasse ZipArchive verwenden — diese Seite zeigt den gleichwertigen, unterstützten Ansatz.
Was „unkomprimierte Größe" bedeutet
Ein ZIP-Archiv speichert für jeden Eintrag zwei Größenangaben:
- Unkomprimierte Größe — wie groß die Datei nach dem Entpacken ist (was
zip_entry_filesize()meldete und wasZipArchive::statName()alssizebereitstellt). - Komprimierte Größe — wie viele Bytes der Eintrag nach der Komprimierung tatsächlich im Archiv belegt. In der prozeduralen API war dies
zip_entry_compressedsize(); mitZipArchiveist es das Feldcomp_size.
Die unkomprimierte Größe im Voraus zu kennen ist nützlich, um Benutzern Download-Größen anzuzeigen, zu prüfen, ob genug Speicherplatz zum Entpacken vorhanden ist, oder einen Upload vor dem Entpacken zu validieren.
Veraltete Syntax
Als Referenz lautete die ursprüngliche Signatur:
int zip_entry_filesize(resource $zip_entry)Dabei ist $zip_entry ein ZIP-Eintrags-Handle, das von zip_read() zurückgegeben wird. Es gab die unkomprimierte Größe des Eintrags in Bytes zurück. Da die Funktion nicht mehr existiert, sollte sie in neuem Code nicht verwendet werden.
Der moderne Ersatz: ZipArchive::statName()
Der unterstützte Weg, die unkomprimierte Größe eines Eintrags zu lesen, ist ZipArchive::statName(), das ein assoziatives Array mit Metadaten zurückgibt (oder false, wenn der Eintrag fehlt). Der Schlüssel size enthält die unkomprimierte Größe.
$zip = new ZipArchive();
if ($zip->open('example.zip') === true) {
$stat = $zip->statName('file.txt');
if ($stat !== false) {
echo "The uncompressed size of the file is: " . $stat['size'] . " bytes.";
} else {
echo "File not found in archive.";
}
$zip->close();
} else {
echo "Failed to open archive.";
}statName() sucht einen Eintrag anhand seines Pfads im Archiv. Wenn Sie nur einen Index haben (zum Beispiel beim Durchlaufen mit numFiles), verwenden Sie stattdessen statIndex() — es gibt dieselbe Array-Struktur zurück.
Vergleich von komprimierter und unkomprimierter Größe
Da das stat-Array beide Zahlen enthält, können Sie das Kompressionsverhältnis in einem Durchlauf ausgeben — ohne separate Aufrufe wie das alte Paar zip_entry_filesize() / zip_entry_compressedsize():
$zip = new ZipArchive();
if ($zip->open('example.zip') === true) {
for ($i = 0; $i < $zip->numFiles; $i++) {
$stat = $zip->statIndex($i);
$saved = $stat['size'] > 0
? round(100 * (1 - $stat['comp_size'] / $stat['size']))
: 0;
echo "{$stat['name']}: {$stat['size']} bytes -> {$stat['comp_size']} bytes ({$saved}% saved)\n";
}
$zip->close();
} else {
echo "Failed to open archive.";
}Häufige Fallstricke
- Rückgabewert prüfen.
open()gibt bei Erfolgtrueoder bei einem Fehler einen Fehlercode (eine ganze Zahl) zurück, daher mit=== truevergleichen, nicht mit einer lockeren Wahrheitsprüfung.statName()gibtfalsezurück, wenn ein Eintrag fehlt. sizeist der unkomprimierte Wert. Ein häufiger Fehler ist die Annahme, es handele sich um die Größe auf dem Datenträger innerhalb des ZIPs — das istcomp_size.- Verzeichnisse sind ebenfalls Einträge. Beim Durchlaufen mit
statIndex()erscheinen Verzeichniseinträge mit einem abschließenden/und einersizevon0.
Fazit
zip_entry_filesize() wurde in PHP 8.1 entfernt und sollte daher nicht in neuem Code vorkommen. Ihre Aufgabe — das Lesen der unkomprimierten Größe eines Eintrags — wird nun von ZipArchive::statName() (oder statIndex()) übernommen, dessen Feld size denselben Wert liefert und gleichzeitig comp_size für die komprimierte Größe bereitstellt. Weitere verwandte Hilfsfunktionen für Dateigrößen finden Sie in der ZipArchive-Übersicht und bei filesize().