Trabalhando 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

Criar e processar arquivos ZIP é uma das tarefas comuns no desenvolvimento web. Em PHP, essa tarefa é resolvida com a extensão nativa Zip, que fornece a classe poderosa e conveniente ZipArchive. Com ela, você pode criar novos arquivos, extrair os existentes, adicionar ou remover arquivos, além de trabalhar com metadados.

Neste artigo, abordaremos detalhadamente todas as operações principais com arquivos ZIP em PHP: desde a criação simples até o tratamento de erros e o trabalho com senhas. Todos os exemplos estão prontos para uso em seus projetos.



Preparação: verificando se a extensão Zip está disponível

Antes de começar, certifique-se de que a extensão zip está instalada e habilitada no seu servidor. Você pode verificar isso com a função phpinfo() ou com um script simples:

<?phpif (extension_loaded('zip')) {    echo "Extensão Zip disponível";} else {    echo "Extensão Zip não encontrada";}?>

Se a extensão estiver ausente, instale-a através do gerenciador de pacotes do seu sistema operacional (por exemplo, apt install php-zip para Ubuntu) ou habilite-a no arquivo php.ini.



Criando um novo arquivo ZIP

A maneira mais simples de criar um arquivo é abrir um novo arquivo no modo de escrita e adicionar arquivos a ele. Veja um exemplo básico:

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

// Cria um novo arquivo (ZIPARCHIVE::CREATE)if ($zip->open($filename, ZipArchive::CREATE) === TRUE) { // Adiciona um arquivo do sistema de arquivos local $zip->addFile('/path/to/file1.txt', 'file1.txt'); // Adiciona uma string como um novo arquivo no arquivo $zip->addFromString('hello.txt', 'Olá, mundo!'); // Adiciona uma pasta inteira (recursivamente) $zip->addGlob('/path/to/dir/*.*'); $zip->close(); echo "Arquivo $filename criado com sucesso";} else { echo "Erro ao criar o arquivo";}?>

Observe: o segundo parâmetro de addFile() é o nome do arquivo dentro do arquivo ZIP. Se não for especificado, o arquivo será salvo com o nome original.



Extraindo um arquivo ZIP

A extração de arquivos de um arquivo ZIP é feita com 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) {    // Extrai tudo para a pasta 'unpacked'    $zip->extractTo('/path/to/unpacked/');    $zip->close();    echo "Arquivo extraído";} else {    echo "Erro ao abrir o arquivo";}?>

Se precisar extrair apenas arquivos específicos, passe a lista deles como terceiro argumento:

$zip->extractTo('/path/to/unpacked/', ['file1.txt', 'hello.txt']);


Visualizando o conteúdo do arquivo

Às vezes, é necessário obter a lista de arquivos dentro do arquivo ZIP sem extraí-lo. Para isso, use as propriedades e métodos do ZipArchive:

<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) {    echo "Número de arquivos: " . $zip->numFiles . "<br>";        for ($i = 0; $i < $zip->numFiles; $i++) {        $stat = $zip->statIndex($i);        echo "Arquivo: " . $stat['name'] . " (tamanho: " . $stat['size'] . " bytes)<br>";    }        $zip->close();}?>


Adicionando arquivos mantendo a estrutura de pastas

Para preservar a hierarquia de diretórios ao adicionar, use caminhos relativos no nome do arquivo dentro do arquivo ZIP:

<?php$zip = new ZipArchive();$zip->open('backup.zip', ZipArchive::CREATE);

// Adiciona um arquivo mantendo a subpasta$zip->addFile('/var/www/images/photo.jpg', 'images/photo.jpg');// Ou recursivamente uma pasta inteira$zip->addPattern('/\\.(jpg|png)$/', '/var/www/images/', ['add_path' => 'images/']);

$zip->close();?>


Removendo arquivos do arquivo ZIP

Para remover um arquivo específico

Recommendations