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()).
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 queZipArchive::statName()expone comosize). - 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(); conZipArchivees el campocomp_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()devuelvetrueen 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()devuelvefalsepara una entrada que no existe. sizees el valor sin comprimir. Un error común es asumir que es el tamaño en disco dentro del zip — eso escomp_size.- Los directorios también son entradas. Al recorrer con
statIndex(), las entradas de directorio aparecen con una/al final y unsizede0.
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.