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ámetro | Descripción |
|---|---|
$zip | El manejador del archivo devuelto por zip_open(). |
$zip_entry | Un manejador de entrada devuelto por zip_read(). |
$mode | El 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
$passwordque aparece en algunas referencias antiguas nunca fue funcional en la extensiónzipintegrada; 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.