W3docs

zip_entry_filesize()

La función zip_entry_filesize() en PHP devuelve el tamaño sin comprimir de un archivo dentro de un archivo zip. Sustituida en PHP 8.1.

La función zip_entry_filesize() era una función integrada de PHP que devolvía el tamaño sin comprimir (original), en bytes, de un único archivo dentro de un archivo zip. Funcionaba junto con la antigua API zip de procedimientos (zip_open(), zip_read() y zip_entry_open()).

Advertencia

zip_entry_filesize() fue deprecada en PHP 8.0 y eliminada en PHP 8.1. No existe en PHP moderno. El nuevo código debería usar la clase ZipArchive en su lugar — esta página muestra el enfoque equivalente y compatible.

Qué significa "tamaño sin comprimir"

Un archivo zip almacena dos tamaños para cada entrada:

  • Tamaño sin comprimir — el tamaño del archivo una vez extraído (lo que reportaba zip_entry_filesize() y lo que ZipArchive::statName() expone como size).
  • Tamaño comprimido — cuántos bytes ocupa realmente la entrada dentro del archivo después de la compresión. En la API de procedimientos esto era zip_entry_compressedsize(); con ZipArchive es el campo comp_size.

Conocer el tamaño sin comprimir de antemano es útil para mostrar los tamaños de descarga a los usuarios, decidir si tienes suficiente espacio en disco para extraer, o validar una carga antes de descomprimir.

Sintaxis heredada

Como referencia, la firma original era:

int zip_entry_filesize(resource $zip_entry)

Donde $zip_entry es un identificador de entrada zip devuelto por zip_read(). Devolvía el tamaño sin comprimir de la entrada en bytes. Dado que la función ya no existe, no debe usarse en código nuevo.

El reemplazo moderno: ZipArchive::statName()

La forma compatible de leer el tamaño sin comprimir de una entrada es ZipArchive::statName(), que devuelve un array asociativo de metadatos (o false si la entrada no existe). La clave size contiene el tamaño sin comprimir.

$zip = new ZipArchive();
if ($zip->open('example.zip') === true) {
    $stat = $zip->statName('file.txt');
    if ($stat !== false) {
        echo "The uncompressed size of the file is: " . $stat['size'] . " bytes.";
    } else {
        echo "File not found in archive.";
    }
    $zip->close();
} else {
    echo "Failed to open archive.";
}

statName() busca una entrada por su ruta dentro del archivo. Si solo tienes un índice (por ejemplo, al recorrer con numFiles), usa statIndex() en su lugar — devuelve el mismo formato de array.

Comparar el tamaño comprimido y sin comprimir

Dado que el array stat contiene ambos números, puedes reportar la ratio de compresión en un solo recorrido — sin llamadas separadas como el antiguo par zip_entry_filesize() / zip_entry_compressedsize():

$zip = new ZipArchive();
if ($zip->open('example.zip') === true) {
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $stat = $zip->statIndex($i);
        $saved = $stat['size'] > 0
            ? round(100 * (1 - $stat['comp_size'] / $stat['size']))
            : 0;
        echo "{$stat['name']}: {$stat['size']} bytes -> {$stat['comp_size']} bytes ({$saved}% saved)\n";
    }
    $zip->close();
} else {
    echo "Failed to open archive.";
}

Errores comunes

  • Comprueba el valor de retorno. open() devuelve true en caso de éxito o un código de error (un entero) en caso de fallo, así que compara con === true, no con una comprobación de veracidad laxa. statName() devuelve false para una entrada que no existe.
  • size es el valor sin comprimir. Un error común es asumir que es el tamaño en disco dentro del zip — eso es comp_size.
  • Los directorios también son entradas. Al recorrer con statIndex(), las entradas de directorio aparecen con una / al final y un size de 0.

Conclusión

zip_entry_filesize() fue eliminada en PHP 8.1, por lo que no debería aparecer en código nuevo. Su función — leer el tamaño sin comprimir de una entrada — es ahora manejada por ZipArchive::statName() (o statIndex()), cuyo campo size da el mismo valor, mientras que también expone comp_size para el tamaño comprimido. Consulta la descripción general de ZipArchive y filesize() para conocer otros helpers relacionados con el tamaño de archivos.

Práctica

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