Start · Sprachen · PHP · Referenz · zip_entry_filesize

zip_entry_filesize

Funktion

Gibt die tatsächliche (unkomprimierte) Dateigröße eines ZIP-Eintrags in Bytes zurück.

seit PHP 4.1.0 Kategorie: io

Signatur

zip_entry_filesize(resource $zip_entry): int

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

Typ
int
Beschreibung
Die unkomprimierte Dateigröße des ZIP-Eintrags in Bytes. Gibt 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";
}
?>
Dateiname: readme.txt | Unkomprimierte Größe: 1024 Bytes Dateiname: bild.png | Unkomprimierte Größe: 204800 Bytes

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";
}
?>
Dateiname: readme.txt | Unkomprimierte Größe: 1024 Bytes Dateiname: bild.png | Unkomprimierte Größe: 204800 Bytes

// 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.