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 proceduralzip_*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 claseZipArchiveen 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
storese descomprimen instantáneamente; las entradasdeflateconsumen 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:
| Constante | Código | Significado |
|---|---|---|
ZipArchive::CM_STORE | 0 | La entrada se almacena sin comprimir. |
ZipArchive::CM_DEFLATE | 8 | La 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.