Trabalho com arquivos ZIP em PHP: guia completo sobre ZipArchive

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao trabalho com arquivos ZIP em PHP



A arquivação de dados é uma das tarefas básicas do desenvolvimento web. Seja para backup de banco de dados, empacotamento de arquivos enviados pelo usuário ou exportação de grandes volumes de informações — o formato ZIP continua sendo a solução mais popular e versátil. O PHP fornece a classe nativa ZipArchive, que permite realizar todas as operações principais com arquivos ZIP sem a necessidade de instalar extensões adicionais.



Neste artigo, abordaremos em detalhes como usar o ZipArchive em PHP: desde a criação de um arquivo simples até o processamento de pastas aninhadas e proteção por senha. Todos os exemplos de código estão prontos para uso no seu servidor.



Preparação: verificando a extensão Zip



Antes de começar, certifique-se de que a extensão zip está habilitada no seu servidor. Geralmente, ela vem instalada por padrão nas versões modernas do PHP (7.4+, 8.x). Você pode verificar isso usando a função phpinfo() ou um script simples:



<?phpif (extension_loaded('zip')) {    echo 'Extensão Zip disponível';} else {    echo 'Extensão Zip não encontrada. Instale-a via php.ini';}?>


Criando um arquivo ZIP em PHP



Passo 1. Inicializando o objeto ZipArchive



Para começar, crie uma instância da classe ZipArchive e abra um novo arquivo usando o método open(). O segundo parâmetro — a flag ZipArchive::CREATE — indica que o arquivo será criado do zero (ou sobrescrito, se já existir).



<?php$zip = new ZipArchive();$zipName = 'example.zip';

if ($zip->open($zipName, ZipArchive::CREATE) !== TRUE) { exit("Não foi possível criar o arquivo $zipName");}?>


Passo 2. Adicionando arquivos ao arquivo



O método addFile() adiciona um arquivo existente do sistema de arquivos. O primeiro argumento é o caminho para o arquivo, o segundo (opcional) é o nome do arquivo dentro do arquivo ZIP (se quiser renomeá-lo).



<?php// Adicionando um único arquivo$zip->addFile('document.pdf', 'my_document.pdf');

// Adicionando vários arquivos$files = ['photo1.jpg', 'photo2.jpg', 'photo3.jpg'];foreach ($files as $file) { $zip->addFile($file);}?>


Passo 3. Adicionando uma pasta inteira mantendo a estrutura



Se precisar empacotar um diretório com todos os arquivos aninhados, use uma travessia recursiva. Aqui está uma função pronta:



<?phpfunction addFolderToZip($zip, $folder, $parentFolder = '') {    $files = new RecursiveIteratorIterator(        new RecursiveDirectoryIterator($folder),        RecursiveIteratorIterator::LEAVES_ONLY    );

foreach ($files as $file) { if (!$file->isDir()) { $filePath = $file->getRealPath(); $relativePath = $parentFolder . $file->getFilename(); $zip->addFile($filePath, $relativePath); } }}

// Uso:$zip->addEmptyDir('my_folder'); // criando uma pasta no arquivoaddFolderToZip($zip, '/path/to/source_folder', 'my_folder/');?>


Passo 4. Fechando o arquivo



Após adicionar todos os arquivos, feche o arquivo — caso contrário, os dados não serão gravados.



<?php$zip->close();echo "Arquivo $zipName criado com sucesso!";?>


Extraindo um arquivo ZIP em PHP



Para extrair arquivos, use o método extractTo(). Especifique a pasta de destino onde os arquivos serão extraídos.



<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) {    $zip->extractTo('/path/to/extract_folder/');    $zip->close();    echo 'Arquivo extraído com sucesso';} else {    echo 'Erro ao abrir o arquivo';}?>


Recursos avançados do ZipArchive



Adicionando uma string como arquivo



O método addFromString() permite criar um arquivo diretamente a partir de uma str

Recommendations