W3docs

zip_open()

A função zip_open() é uma função nativa do PHP usada para abrir um arquivo zip. Retorna um recurso de arquivo zip que pode ser utilizado para

Nota: zip_open() foi descontinuada no PHP 7.1 e removida no PHP 8.0. Esta função é fornecida apenas para compatibilidade com código legado. Para aplicações PHP modernas, utilize a classe ZipArchive.

A função zip_open() é uma função nativa do PHP que era usada para abrir um arquivo zip. A função retorna um recurso de arquivo zip que pode ser utilizado para ler e manipular o conteúdo do arquivo.

Sintaxe

A sintaxe da função zip_open() é a seguinte:

Sintaxe da função zip_open() em PHP

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

Onde:

  • $filename é o caminho para o arquivo zip a ser aberto.
  • $flags é um inteiro opcional com flags que modificam como o arquivo é aberto. Na prática, esse parâmetro raramente é usado e geralmente é passado como 0.
  • $error é uma variável de referência opcional. Quando a abertura falha, o PHP a define com um código de erro numérico para que você possa descobrir por que a abertura falhou.

Em caso de sucesso, a função retorna um recurso de arquivo zip (um identificador opaco). Em caso de falha, retorna false ou, em algumas compilações, um código de erro inteiro — portanto, sempre verifique o resultado antes de utilizá-lo.

Por que foi removida?

zip_open() pertence à antiga API Zip procedural (zip_open(), zip_read(), zip_close() e os auxiliares zip_entry_*()). Essa API foi descontinuada no PHP 7.1 e removida completamente no PHP 8.0. O substituto é a classe orientada a objetos ZipArchive, que é mais rápida, pode tanto ler quanto gravar arquivos, e é a versão mantida atualmente.

Exemplos de Uso

Vamos comparar a abordagem legada com a moderna que você deve realmente utilizar.

Exemplo: Abrindo um Arquivo Zip (API legada)

Suponha que você tenha um arquivo zip example.zip e queira abri-lo. Com a API antiga, você chamaria zip_open() e verificaria o resultado:

Abrindo um Arquivo Zip em PHP (somente 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;
}

Isso tenta abrir example.zip. Como a função retorna um recurso em caso de sucesso, mas um código de erro inteiro em caso de falha, a verificação mais segura é is_resource(). Ler ou extrair entradas requer as funções complementares zip_read(), zip_entry_open() e zip_entry_read() — todas também removidas no PHP 8.0.

Exemplo: O equivalente moderno com ZipArchive

Em qualquer versão do PHP suportada (7.x e 8.x), faça a mesma coisa com a classe ZipArchive. ZipArchive::open() retorna true em caso de sucesso ou um código de erro em caso de falha:

Abrindo e lendo um arquivo zip com 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 mantém as etapas de abrir, inspecionar e fechar em um objeto bem documentado e, ao contrário da API legada, também pode criar e modificar arquivos com addFile() e addFromString().

Conclusão

Neste artigo, discutimos a função legada zip_open() — sua sintaxe, seus parâmetros $flags e $error, seus valores de retorno e como verificar o resultado com is_resource(). Como zip_open() foi removida no PHP 8.0, trate-a como referência histórica somente leitura: aplicações modernas devem usar a classe ZipArchive para um gerenciamento de arquivos confiável e seguro. Veja também zip_read() e zip_close() para o restante da API legada.

Prática

Prática
Quais parâmetros são recebidos pela função 'zip_open()' em PHP?
Quais parâmetros são recebidos pela função 'zip_open()' em PHP?
Was this page helpful?