W3docs

zip_entry_open()

La función zip_entry_open() de PHP abre una entrada en un archivo zip para poder leer su contenido. Aprende su sintaxis y alternativas modernas.

⚠️ Aviso de obsolescencia: La función zip_entry_open() pertenece a la extensión zip heredada, que fue declarada obsoleta en PHP 7.4 y eliminada en PHP 8.0. Los ejemplos a continuación se proporcionan únicamente como referencia histórica. Para aplicaciones PHP modernas, utiliza la clase ZipArchive en su lugar.

zip_entry_open() prepara una entrada (archivo) individual dentro de un archivo zip abierto para que su contenido pueda ser leído. Funciona de la mano con zip_open(), zip_read() y zip_entry_read(): abres el archivo, iteras hasta una entrada, abres esa entrada y luego lees desde ella. Sin llamar primero a zip_entry_open(), una llamada a zip_entry_read() no tiene nada desde donde leer.

Esta página cubre la firma de la función, sus parámetros y valor de retorno, un ejemplo completo de lectura de una entrada y, lo más importante, la alternativa moderna con ZipArchive que deberías usar hoy en día.

Sintaxis

resource zip_entry_open(resource $zip, resource $zip_entry, string $mode = "r")

Parámetros

ParámetroDescripción
$zipEl manejador del archivo devuelto por zip_open().
$zip_entryUn manejador de entrada devuelto por zip_read().
$modeEl modo de acceso. La extensión zip heredada solo admitía acceso de lectura, por lo que en la práctica siempre es "r".

El cuarto argumento $password que aparece en algunas referencias antiguas nunca fue funcional en la extensión zip integrada; se ignora.

Valor de retorno

Devuelve true en caso de éxito o false en caso de error. A pesar del indicador de tipo histórico resource, no se obtiene un nuevo manejador — se sigue pasando el mismo manejador $zip_entry a zip_entry_read().

Ejemplo de uso

Ejemplo: Leer un archivo desde un archivo zip

Abre el archivo, navega hasta una entrada, abre esa entrada, léela y limpia:

$zip = zip_open("example.zip");

if (is_resource($zip)) {
    while ($zip_entry = zip_read($zip)) {
        // Prepare this entry for reading
        if (zip_entry_open($zip, $zip_entry, "r")) {
            $name     = zip_entry_name($zip_entry);
            $contents = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

            echo "$name: $contents\n";

            zip_entry_close($zip_entry);
        }
    }
    zip_close($zip);
}

Aquí zip_open() abre el archivo, zip_read() avanza a cada entrada por turno, zip_entry_open() hace que la entrada actual sea legible y zip_entry_read() devuelve sus bytes. Siempre empareja cada apertura exitosa con zip_entry_close(), y cierra el archivo con zip_close() cuando hayas terminado.

Alternativa moderna: la clase ZipArchive

Para lograr el mismo resultado en PHP 8.0+, utiliza la clase integrada ZipArchive:

$zip = new ZipArchive;

if ($zip->open('example.zip') === true) {
    // Loop over every entry by index
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $name     = $zip->getNameIndex($i);
        $contents = $zip->getFromIndex($i);

        echo "$name: $contents\n";
    }
    $zip->close();
}

ZipArchive no necesita un paso separado de "abrir la entrada": getFromIndex() (o getFromName()) lee el contenido de una entrada directamente, y funciona en todas las versiones modernas de PHP.

Conclusión

En este artículo, hemos analizado la función PHP zip_entry_open() y cómo se puede utilizar para abrir un archivo dentro de un archivo zip. Hemos explicado qué hace la función, su sintaxis y proporcionado un ejemplo de cómo se puede usar en un escenario práctico. Ten en cuenta que zip_entry_open() está obsoleta y fue eliminada en PHP 8.0; para proyectos modernos, utiliza la clase ZipArchive para abrir y leer archivos en un archivo zip.

Práctica

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