W3docs

zip_open()

La función zip_open() de PHP abre archivos zip. Eliminada en PHP 8.0; usa la clase ZipArchive en su lugar.

Nota: zip_open() fue declarada obsoleta en PHP 7.1 y eliminada en PHP 8.0. Esta función se documenta únicamente por compatibilidad con código heredado. Para aplicaciones PHP modernas, utiliza la clase ZipArchive en su lugar.

La función zip_open() es una función integrada en PHP que se utilizaba para abrir un archivo zip. La función devuelve un recurso de archivo zip que puede usarse para leer y manipular el contenido del archivo.

Sintaxis

La sintaxis de la función zip_open() es la siguiente:

Sintaxis de la función zip_open() en PHP

resource zip_open(string $filename [, int $flags [, string &$error ]])

Donde:

  • $filename es la ruta al archivo zip que se desea abrir.
  • $flags es un entero opcional con indicadores que modifican cómo se abre el archivo. En la práctica, este parámetro rara vez se utiliza y generalmente se pasa como 0.
  • $error es una variable de referencia opcional. Cuando la apertura falla, PHP le asigna un código de error numérico para que puedas saber por qué falló la apertura.

Si tiene éxito, la función devuelve un recurso de archivo zip (un identificador opaco). Si falla, devuelve false o, en algunas versiones, un código de error entero; por eso siempre debes comprobar el resultado antes de usarlo.

¿Por qué fue eliminada?

zip_open() pertenece a la antigua API Zip procedimental (zip_open(), zip_read(), zip_close() y los auxiliares zip_entry_*()). Esta API fue declarada obsoleta en PHP 7.1 y eliminada por completo en PHP 8.0. Su reemplazo es la clase orientada a objetos ZipArchive, que es más rápida, puede tanto leer como escribir archivos, y es la versión que sigue manteniéndose hoy en día.

Ejemplos de uso

Comparemos el enfoque heredado con el moderno que deberías utilizar.

Ejemplo: Abrir un archivo zip (API heredada)

Supongamos que tienes un archivo zip example.zip y quieres abrirlo. Con la API antigua llamarías a zip_open() y comprobarías el resultado:

Abrir un archivo zip en PHP (solo PHP < 8.0)

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

// On failure the function returns an integer error code instead of a resource.
if (is_resource($zip)) {
    echo "Archive opened successfully.";
    zip_close($zip);
} else {
    echo "Failed to open archive. Error code: " . $zip;
}

Este código intenta abrir example.zip. Dado que la función devuelve un recurso en caso de éxito pero un código de error entero en caso de fallo, la comprobación más segura es is_resource(). Leer o extraer entradas requiere las funciones complementarias zip_read(), zip_entry_open() y zip_entry_read(), todas ellas también eliminadas en PHP 8.0.

Ejemplo: El equivalente moderno con ZipArchive

En cualquier versión de PHP compatible (7.x y 8.x), realiza lo mismo con la clase ZipArchive. ZipArchive::open() devuelve true en caso de éxito o un código de error en caso de fallo:

Abrir y leer un archivo zip con ZipArchive

$zip = new ZipArchive();

if ($zip->open("example.zip") === true) {
    echo "Archive opened. It contains {$zip->numFiles} file(s).\n";

    // Read the first entry's name as an example.
    if ($zip->numFiles > 0) {
        echo "First entry: " . $zip->getNameIndex(0) . "\n";
    }

    $zip->close();
} else {
    echo "Failed to open archive.\n";
}

ZipArchive agrupa los pasos de apertura, inspección y cierre en un objeto bien documentado, y a diferencia de la API heredada también puede crear y modificar archivos con addFile() y addFromString().

Conclusión

En este artículo hemos analizado la función heredada zip_open(): su sintaxis, sus parámetros $flags y $error, sus valores de retorno y cómo comprobar el resultado con is_resource(). Dado que zip_open() fue eliminada en PHP 8.0, trátala como referencia histórica de solo lectura: las aplicaciones modernas deben usar la clase ZipArchive para una gestión de archivos confiable y segura. Consulta también zip_read() y zip_close() para el resto de la API heredada.

Práctica

Práctica
¿Qué parámetros acepta la función 'zip_open()' en PHP?
¿Qué parámetros acepta la función 'zip_open()' en PHP?
Was this page helpful?