W3docs

zip_entry_compressedsize()

La función zip_entry_compressedsize() obtiene el tamaño comprimido de un archivo en un zip. Obsoleta en PHP 7.4 y eliminada en PHP 8.0.

La función zip_entry_compressedsize() es una función heredada de la extensión zip de PHP. Devuelve el tamaño comprimido de una entrada individual dentro de un archivo zip abierto, es decir, el número de bytes que el archivo ocupa realmente en disco tras la compresión, que suele ser menor que su tamaño original.

Esta página explica qué devolvía la función, cómo se usaba y, lo más importante, qué utilizar en su lugar, porque la función fue obsoleta en PHP 7.4 y eliminada en PHP 8.0. En cualquier instalación moderna de PHP (8.0 o posterior), llamarla genera un Error fatal, por lo que se recomienda usar la clase ZipArchive que se muestra a continuación.

Por qué importa el tamaño comprimido

Cada archivo almacenado en un archivo zip tiene dos tamaños:

  • Tamaño sin comprimir — la longitud en bytes original del archivo. Véase zip_entry_filesize().
  • Tamaño comprimido — la longitud en bytes después de que el algoritmo deflate lo reduzca. Eso es lo que devolvía zip_entry_compressedsize().

Comparar ambos permite conocer la tasa de compresión. Los textos muy comprimibles pueden reducirse al 20% de su tamaño original, mientras que los datos ya comprimidos (JPEG, MP3) apenas cambian. Conocer el tamaño comprimido es útil para barras de progreso, planificación de almacenamiento y para decidir si vale la pena volver a comprimir.

Sintaxis

La sintaxis de la función zip_entry_compressedsize() es la siguiente:

sintaxis de la función zip_entry_compressedsize() en PHP

int zip_entry_compressedsize(resource $zip_entry)

Donde $zip_entry es el manejador de entrada zip devuelto por zip_read() para el archivo del archivo zip. Devuelve el tamaño comprimido como un número entero de bytes. Tenga en cuenta que esta función pertenece a la extensión zip heredada y ya no está disponible en PHP 8.0+.

Ejemplos de uso

Veamos un ejemplo práctico del uso de zip_entry_compressedsize() en PHP.

Ejemplo: Obtener el tamaño comprimido de un archivo en un zip

Suponga que ha abierto un archivo zip con las funciones zip heredadas de PHP y desea obtener el tamaño comprimido de un archivo en el archivo. Puede usar la función zip_entry_compressedsize() de la siguiente manera:

Obtener el tamaño comprimido de un archivo en un zip en PHP

$zip = zip_open("example.zip");
if ($zip === false) {
    die("Failed to open zip archive.");
}

$zip_entry = zip_read($zip);
if ($zip_entry === false) {
    die("Failed to read zip entry.");
}

// get the compressed size of the file
$compressed_size = zip_entry_compressedsize($zip_entry);

echo "The compressed size of the file is: " . $compressed_size . " bytes.";

Este código abre un archivo zip example.zip usando zip_open(). Luego se lee un archivo del archivo usando zip_read() y se obtiene su tamaño comprimido con zip_entry_compressedsize(). Finalmente, el tamaño comprimido se muestra al usuario. En un script real, se haría un bucle sobre zip_read() para recorrer cada entrada y se llamaría a zip_close() al finalizar.

Alternativa moderna: Usar ZipArchive

Dado que las funciones heredadas zip_* fueron eliminadas en PHP 8.0, se recomienda usar la clase integrada ZipArchive en su lugar. A continuación se muestra cómo obtener el tamaño comprimido de un archivo usando ZipArchive:

$zip = new ZipArchive;
if ($zip->open('example.zip') === true) {
    $index = $zip->locateName('example.txt');
    if ($index !== false) {
        $stat = $zip->statIndex($index);
        $compressedSize   = $stat['comp_size']; // equivalent of zip_entry_compressedsize()
        $uncompressedSize = $stat['size'];      // original size

        echo "Compressed:   {$compressedSize} bytes\n";
        echo "Uncompressed: {$uncompressedSize} bytes\n";

        if ($uncompressedSize > 0) {
            $ratio = round(100 * (1 - $compressedSize / $uncompressedSize), 1);
            echo "Space saved:  {$ratio}%\n";
        }
    }
    $zip->close();
}

El método statIndex() devuelve un array asociativo que describe la entrada; su clave comp_size contiene el tamaño comprimido que devolvía la función heredada, y size contiene el tamaño sin comprimir. Como ambos están disponibles, se puede calcular la tasa de compresión directamente, tal como se muestra arriba.

Conclusión

En este artículo hemos analizado la función heredada zip_entry_compressedsize() y cómo se usaba para obtener el tamaño comprimido de un archivo en un zip. Hemos explicado su sintaxis, por qué importa el tamaño comprimido, proporcionado un ejemplo heredado con manejo básico de errores y mostrado una alternativa moderna usando la clase ZipArchive con un cálculo de tasa de compresión. Para versiones actuales de PHP (8.0+), utilice siempre ZipArchive para evitar errores fatales y garantizar la compatibilidad.

Ver también

Práctica

Práctica
¿Cuál es la funcionalidad de la función zip_entry_compressedsize() en PHP?
¿Cuál es la funcionalidad de la función zip_entry_compressedsize() en PHP?
Was this page helpful?