W3docs

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_* (incluida zip_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 clase ZipArchive.

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.

Práctica

Práctica
¿Qué hace la función zip_entry_close() en PHP?
¿Qué hace la función zip_entry_close() en PHP?
Was this page helpful?