zip_entry_close()
La función zip_entry_close() en PHP cierra un manejador zip_entry liberando el recurso asociado. Eliminada en PHP 8.0; use ZipArchive.
⚠️ Obsoleta y eliminada: Las funciones
zip_*(incluidazip_entry_close()) fueron marcadas como obsoletas en PHP 7.4 y eliminadas en PHP 8.0. Este contenido se conserva únicamente como referencia histórica. Para PHP moderno, utilice la claseZipArchive.
La función zip_entry_close() era una función integrada de PHP usada para cerrar un manejador zip_entry. Cuando termina de trabajar con un archivo dentro de un archivo ZIP, debe cerrar el manejador mediante zip_entry_close() para liberar el recurso asociado. (Nota: la extensión ZIP heredada era principalmente de solo lectura, por lo que cerrar el manejador no guarda cambios en el archivo.)
Sintaxis
La sintaxis de la función zip_entry_close() es la siguiente:
Sintaxis de la función zip_entry_close() en PHP
void zip_entry_close(resource $zip_entry)Donde $zip_entry es el manejador zip_entry devuelto por zip_read(). (Nota: el tipo resource es heredado; esta función ya no existe en PHP 8.0+.)
Ejemplos de uso
Veamos un ejemplo práctico del uso de zip_entry_close() en PHP.
Ejemplo: Cerrar un manejador de entrada ZIP
Suponga que ha abierto un archivo ZIP con las funciones ZIP de PHP y ha extraído el contenido de un archivo usando zip_entry_read(). Debe cerrar el manejador zip_entry con zip_entry_close() una vez que haya terminado, de la siguiente manera:
Cerrar un manejador de entrada ZIP en PHP
$zip = zip_open("example.zip");
if ($zip !== false) {
$zip_entry = zip_read($zip);
if ($zip_entry !== false) {
// do something with the contents of the zip entry
zip_entry_close($zip_entry);
}
zip_close($zip);
}Este código abre el archivo ZIP example.zip con zip_open(), lee la primera entrada con zip_read() y (en un programa real) la abriría con zip_entry_open() y la leería con zip_entry_read(). Cuando termina, zip_entry_close() cierra el manejador zip_entry y libera el recurso, y finalmente zip_close() cierra el propio archivo.
Iterar sobre todas las entradas
En la práctica, rara vez se cierra una sola entrada manualmente. zip_read() devuelve la siguiente entrada en cada llamada y false cuando no hay más, por lo que un bucle while cierra cada manejador a medida que avanza:
$zip = zip_open("example.zip");
if (is_resource($zip)) {
while ($entry = zip_read($zip)) {
zip_entry_open($zip, $entry);
// process the entry, e.g. zip_entry_read($entry, zip_entry_filesize($entry));
zip_entry_close($entry); // free this entry before moving on
}
zip_close($zip);
}Migración a ZipArchive
Dado que la familia de funciones zip_* ya no existe en PHP 8.0+, el ejemplo anterior lanzará Call to undefined function en un intérprete moderno. La clase ZipArchive es el reemplazo admitido. No requiere cerrar las entradas individuales: se lee una entrada por nombre y se llama a close() en todo el archivo al finalizar:
<?php
$zip = new ZipArchive();
if ($zip->open("example.zip") === true) {
// read a file directly by its name inside the archive
$contents = $zip->getFromName("readme.txt");
echo $contents;
$zip->close(); // closes the archive; no per-entry close needed
}ZipArchive::close() reemplaza tanto a zip_entry_close() como a zip_close(), y a diferencia de la extensión heredada de solo lectura, también confirma los cambios realizados con addFile() o addFromString().
Conclusión
En este artículo revisamos la función heredada zip_entry_close(), su sintaxis y cómo encaja en el flujo de trabajo zip_open() → zip_read() → zip_entry_close() → zip_close(). Como se indicó, estas funciones fueron eliminadas en PHP 8.0. Para el desarrollo moderno con PHP, migre a la clase ZipArchive, que proporciona una API orientada a objetos robusta para crear, leer y modificar archivos ZIP sin necesidad de gestionar manejadores por entrada.