W3docs

zip_entry_compressionmethod()

Die Funktion zip_entry_compressionmethod() war eine in PHP integrierte Funktion zum Auslesen der Kompressionsmethode eines Eintrags in einem ZIP-Archiv.

Warnung: zip_entry_compressionmethod() wurde in PHP 5.3.0 als veraltet markiert und in PHP 8.0.0 entfernt (die alte prozedurale zip_*-Lese-API wurde abgeschafft). Sie ist in modernem PHP nicht mehr verfügbar. Diese Seite dient nur historischen Zwecken. Verwenden Sie in allen unterstützten PHP-Versionen stattdessen die ZipArchive-Klasse, wie unten gezeigt.

Die Funktion zip_entry_compressionmethod() war eine in PHP integrierte Funktion zum Auslesen der Kompressionsmethode eines einzelnen Eintrags (einer Datei) innerhalb eines ZIP-Archivs. Die Kompressionsmethode ist der Algorithmus, mit dem der Eintrag gespeichert wurde — am häufigsten deflate (Standard) oder store (keine Kompression).

Diese Seite erklärt, was die veraltete Funktion leistete und — wichtiger — wie man dieselbe Information in modernem PHP mit ZipArchive erhält.

Warum die Kompressionsmethode wichtig ist

Jede Datei in einem ZIP-Archiv speichert, wie sie komprimiert wurde. Die Methode zu kennen ermöglicht Ihnen:

  • Ein Archiv prüfen — bestätigen, ob Dateien tatsächlich komprimiert oder nur gespeichert sind.
  • Aufwand abschätzenstore-Einträge werden sofort dekomprimiert; deflate-Einträge kosten CPU-Ressourcen.
  • Größenprobleme debuggen — bereits komprimierte Daten (JPEG, PNG, MP4) werden häufig gespeichert statt erneut komprimiert, da eine erneute Deflation nichts einspart.

Die zwei Methoden, denen Sie in der Praxis begegnen werden:

KonstanteCodeBedeutung
ZipArchive::CM_STORE0Der Eintrag wird unkomprimiert gespeichert.
ZipArchive::CM_DEFLATE8Der Eintrag wird mit dem Deflate-Algorithmus komprimiert (Standard).

Veraltete Syntax

Die ursprüngliche Funktion nahm ein von zip_read() zurückgegebenes ZIP-Eintrags-Handle entgegen:

int zip_entry_compressionmethod(resource $zip_entry)

Dabei ist $zip_entry die ZIP-Eintrags-Ressource für eine Datei im Archiv. Dies erforderte die veraltete prozedurale ZIP-API, die nicht mehr existiert — verwenden Sie sie daher nicht in neuem Code.

Moderner Ansatz mit ZipArchive

Der portable, versionsübergreifend sichere Weg, die Kompressionsmethode auszulesen, ist ZipArchive::statIndex(). Diese Methode gibt ein Array zurück, dessen Schlüssel comp_method den numerischen Methodencode enthält (0 für store, 8 für deflate). Das folgende Beispiel ist vollständig eigenständig — es erstellt ein kleines Archiv und gibt anschließend die Methode jedes Eintrags aus:

<?php
$file = sys_get_temp_dir() . '/example.zip';

// 1. Build a zip with one compressed and one stored entry.
$zip = new ZipArchive();
if ($zip->open($file, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
    $zip->addFromString('report.txt', str_repeat('compress me ', 100));
    $zip->addFromString('raw.txt', 'left as-is');
    $zip->setCompressionName('raw.txt', ZipArchive::CM_STORE); // force no compression
    $zip->close();
}

// 2. Reopen and read each entry's compression method.
$labels = [
    ZipArchive::CM_STORE   => 'stored (no compression)',
    ZipArchive::CM_DEFLATE => 'deflate',
];

$zip = new ZipArchive();
if ($zip->open($file) === true) {
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $stat   = $zip->statIndex($i);
        $code   = $stat['comp_method'];
        $method = $labels[$code] ?? "unknown ($code)";
        echo "{$stat['name']} => {$method}\n";
    }
    $zip->close();
}

Ausgabe:

report.txt => deflate
raw.txt => stored (no compression)

statIndex() liest aus dem zentralen Verzeichnis und ist daher kostengünstig — die Datei wird dabei nicht dekomprimiert.

Kürzere Alternative: getCompressionName()

Wenn Ihr PHP gegen libzip 1.0 oder neuer gelinkt ist, gibt ZipArchive::getCompressionName() den Methodennamen direkt als String zurück:

$zip = new ZipArchive();
if ($zip->open('example.zip') === true) {
    // Name of the compression method used for the first entry.
    echo $zip->getCompressionName(0); // e.g. "deflate"
    $zip->close();
}

Dies ist besser lesbar, aber getCompressionName() ist nicht in jedem Build vorhanden. Bevorzugen Sie den oben gezeigten statIndex()-Ansatz, wenn Sie serverübergreifende Portabilität benötigen.

Fazit

zip_entry_compressionmethod() gehörte zur entfernten prozeduralen ZIP-API von PHP und sollte in neuem Code niemals verwendet werden. Um die Kompressionsmethode eines ZIP-Eintrags in modernem PHP auszulesen, verwenden Sie ZipArchive::statIndex() und überprüfen Sie den Wert von comp_method (0 = store, 8 = deflate) — oder getCompressionName(), wo es verfügbar ist.

Um weiter mit ZIP-Archiven zu arbeiten, lesen Sie Arbeiten mit der Zip-Erweiterung, zip_entry_name() für den Namen eines Eintrags und zip_entry_compressedsize() für die komprimierte Größe.

Übungen

Übung
Was macht die Funktion zip_entry_compressionmethod() in PHP?
Was macht die Funktion zip_entry_compressionmethod() in PHP?
Was this page helpful?