Start · Sprachen · PHP · Referenz · zip_entry_compressedsize

zip_entry_compressedsize

Funktion

Gibt die komprimierte Größe (in Bytes) eines ZIP-Eintrags zurück.

seit PHP 4.1.0 Kategorie: io

Signatur

zip_entry_compressedsize(resource $zip_entry): int

Beschreibung

zip_entry_compressedsize() ermittelt die komprimierte Größe eines einzelnen Eintrags innerhalb eines ZIP-Archivs. Der Rückgabewert entspricht der Anzahl an Bytes, die der Eintrag nach der Komprimierung im Archiv belegt – also der tatsächlich gespeicherte Platzbedarf auf dem Datenträger.

Diese Funktion gehört zur älteren, prozeduralen ZIP-API von PHP (zusammen mit zip_open(), zip_read() und zip_entry_open()). Sie ist nützlich, wenn man z. B. Fortschrittsanzeigen beim Entpacken umsetzen oder vor dem Entpacken prüfen möchte, wie groß die komprimierte Datei ist.

Im Unterschied dazu liefert zip_entry_filesize() die unkomprimierte Originalgröße. Durch den Vergleich beider Werte lässt sich die Kompressionsrate eines einzelnen Eintrags berechnen.

Hinweis: Die prozedurale ZIP-Erweiterung gilt als veraltet. Für neue Projekte empfiehlt sich die objektorientierte Klasse ZipArchive, die deutlich mehr Funktionalität und bessere Fehlerbehandlung bietet.

Parameter

Name Typ Default Beschreibung
$zip_entry Pflicht resource Eine gültige ZIP-Eintrags-Ressource, wie sie von zip_read() zurückgegeben wird.

Rückgabewert

Typ
int
Beschreibung
Gibt die komprimierte Größe des ZIP-Eintrags in Bytes als Integer zurück. Für gespeicherte (nicht komprimierte) Einträge entspricht dieser Wert der unkomprimierten Größe.

Beispiele

Komprimierte Größe aller Einträge in einem ZIP-Archiv ausgeben

<?php
$zip = zip_open('/var/www/archiv.zip');

if (is_resource($zip)) {
    while ($entry = zip_read($zip)) {
        $name            = zip_entry_name($entry);
        $compressedSize  = zip_entry_compressedsize($entry);
        $originalSize    = zip_entry_filesize($entry);

        echo "Datei: $name\n";
        echo "  Komprimiert : $compressedSize Byte\n";
        echo "  Original    : $originalSize Byte\n";

        if ($originalSize > 0) {
            $ratio = round((1 - $compressedSize / $originalSize) * 100, 1);
            echo "  Ersparnis   : $ratio %\n";
        }
    }
    zip_close($zip);
} else {
    echo "Fehler: ZIP-Archiv konnte nicht geöffnet werden.\n";
}
?>
Datei: readme.txt Komprimiert : 512 Byte Original : 1024 Byte Ersparnis : 50 % Datei: bild.png Komprimiert : 20480 Byte Original : 20480 Byte Ersparnis : 0 %

Gesamte komprimierte Größe aller Einträge summieren

<?php
$zip = zip_open('/var/www/archiv.zip');
$totalCompressed = 0;

if (is_resource($zip)) {
    while ($entry = zip_read($zip)) {
        $totalCompressed += zip_entry_compressedsize($entry);
    }
    zip_close($zip);
    echo "Gesamtgröße (komprimiert): $totalCompressed Byte\n";
} else {
    echo "Fehler beim Öffnen des Archivs.\n";
}
?>
Gesamtgröße (komprimiert): 21092 Byte

// Wichtig · Fallstricke

Veraltete API: Die prozedurale ZIP-API (zip_open, zip_read, zip_entry_*) wird nicht mehr aktiv weiterentwickelt. Ab PHP 8.0 wurde sie als deprecated eingestuft und sollte durch die ZipArchive-Klasse ersetzt werden, die über ZipArchive::statIndex() ebenfalls Informationen zur komprimierten Größe liefert (Feld comp_size).

Die Funktion gibt 0 zurück, wenn der Eintrag ein Verzeichnis ist oder keine komprimierten Daten enthält. Eine Fehlerprüfung auf false ist bei dieser Funktion nicht vorgesehen.