W3docs

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()).

Warnung

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 was ZipArchive::statName() als size bereitstellt).
  • 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(); mit ZipArchive ist es das Feld comp_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 Erfolg true oder bei einem Fehler einen Fehlercode (eine ganze Zahl) zurück, daher mit === true vergleichen, nicht mit einer lockeren Wahrheitsprüfung. statName() gibt false zurück, wenn ein Eintrag fehlt.
  • size ist 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 ist comp_size.
  • Verzeichnisse sind ebenfalls Einträge. Beim Durchlaufen mit statIndex() erscheinen Verzeichniseinträge mit einem abschließenden / und einer size von 0.

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().

Übungen

Übung
Welche Aufgabe hat die Funktion zip_entry_filesize() in PHP?
Welche Aufgabe hat die Funktion zip_entry_filesize() in PHP?
Was this page helpful?