W3docs

zip_entry_compressionmethod()

La función zip_entry_compressionmethod() de PHP obtiene el método de compresión de un archivo en un archivo zip. Obsoleta desde PHP 8.0.

Advertencia: zip_entry_compressionmethod() fue declarada obsoleta en PHP 5.3.0 y eliminada en PHP 8.0.0 (la antigua API procedural zip_* de lectura fue eliminada). Ya no está disponible en PHP moderno. Esta página se conserva como referencia histórica. En cualquier versión de PHP compatible, use la clase ZipArchive en su lugar, como se muestra a continuación.

La función zip_entry_compressionmethod() era una función PHP integrada utilizada para leer el método de compresión de una entrada (archivo) individual dentro de un archivo zip. El método de compresión es el algoritmo que se usó para almacenar esa entrada — generalmente deflate (el predeterminado) o store (sin compresión).

Esta página explica qué hacía la función heredada y, lo más importante, cómo obtener la misma información en PHP moderno con ZipArchive.

Por qué importa el método de compresión

Cada archivo en un archivo zip registra cómo fue comprimido. Conocer el método le permite:

  • Auditar un archivo — confirmar si los archivos están realmente comprimidos o simplemente almacenados.
  • Estimar el trabajo — las entradas store se descomprimen instantáneamente; las entradas deflate consumen CPU.
  • Depurar problemas de tamaño — los datos ya comprimidos (JPEG, PNG, MP4) suelen almacenarse en lugar de recomprimirse, porque volver a aplicar deflate no ahorra nada.

Los dos métodos que encontrará en la práctica son:

ConstanteCódigoSignificado
ZipArchive::CM_STORE0La entrada se almacena sin comprimir.
ZipArchive::CM_DEFLATE8La entrada se comprime con el algoritmo deflate (el predeterminado).

Sintaxis heredada

La función original recibía un manejador de entrada zip devuelto por zip_read():

int zip_entry_compressionmethod(resource $zip_entry)

Donde $zip_entry es el recurso de entrada zip para un archivo en el archivo. Esto requería la antigua API zip procedural y ya no existe, por lo que no debe usarse en código nuevo.

Enfoque moderno con ZipArchive

La forma portable y compatible con versiones para leer el método de compresión es ZipArchive::statIndex(). Devuelve un array cuya clave comp_method contiene el código numérico del método (0 para store, 8 para deflate). El siguiente ejemplo es completamente autocontenido — construye un pequeño archivo zip y luego reporta el método de cada entrada:

<?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();
}

Salida:

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

statIndex() lee desde el directorio central, por lo que es eficiente — nunca descomprime el archivo.

Alternativa más corta: getCompressionName()

Si su PHP está compilado con libzip 1.0 o posterior, ZipArchive::getCompressionName() devuelve el nombre del método directamente como string:

$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();
}

Esto es más legible, pero getCompressionName() no está presente en todas las compilaciones. Prefiera el enfoque con statIndex() cuando necesite portabilidad entre servidores.

Conclusión

zip_entry_compressionmethod() pertenecía a la API zip procedural eliminada de PHP y no debe usarse en código nuevo. Para leer el método de compresión de una entrada zip en PHP moderno, use ZipArchive::statIndex() e inspeccione su valor comp_method (0 = store, 8 = deflate), o getCompressionName() donde esté disponible.

Para seguir trabajando con archivos zip, consulte Trabajar con la extensión Zip, zip_entry_name() para el nombre de una entrada, y zip_entry_compressedsize() para su tamaño comprimido.

Práctica

Práctica
¿Qué hace la función zip_entry_compressionmethod() en PHP?
¿Qué hace la función zip_entry_compressionmethod() en PHP?
Was this page helpful?