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 classeZipArchive.
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 como0.$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.