Trabalhando com arquivos ZIP em PHP: ZipArchive e bibliotecas de compressão

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

Os arquivos ZIP continuam sendo um dos formatos de compressão de dados mais populares no desenvolvimento web. Em PHP, o trabalho com eles é implementado nativamente através da extensão Zip, que fornece a poderosa classe ZipArchive. Isso permite que desenvolvedores criem, leiam, atualizem e extraiam arquivos de arquivos compactados facilmente, sem a necessidade de instalar bibliotecas de terceiros adicionais.



No portal educacional PythonLib.ru, abordaremos todos os aspectos do trabalho com ZIP em PHP: desde operações básicas até técnicas avançadas, incluindo compressão com senha, processamento de grandes volumes de dados e integração com buffer de saída.



Instalação e verificação da extensão Zip

A classe ZipArchive está disponível em PHP a partir da versão 5.2.0. Para utilizá-la, é necessário garantir que a extensão zip esteja habilitada na configuração do servidor. Isso pode ser verificado com a função phpinfo() ou com um script simples:



<?phpif (class_exists('ZipArchive')) {    echo "Extensão Zip disponível";} else {    echo "Extensão Zip não instalada";}?>


Na maioria das hospedagens modernas, a extensão já vem pré-instalada. Se não estiver, entre em contato com o administrador do servidor ou instale-a através do gerenciador de pacotes (por exemplo, apt-get install php-zip para Debian/Ubuntu).



Operações básicas com ZipArchive

1. Criando um novo arquivo ZIP

Para criar um arquivo, utiliza-se o método open() com a flag ZipArchive::CREATE. Vejamos um exemplo básico:



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

if ($zip->open($filename, ZipArchive::CREATE) === TRUE) { // Adicionando um arquivo a partir de uma string $zip->addFromString('hello.txt', 'Olá, mundo!'); // Adicionando um arquivo existente $zip->addFile('/path/to/image.jpg', 'images/photo.jpg'); // Adicionando um diretório vazio $zip->addEmptyDir('documents'); $zip->close(); echo "Arquivo criado com sucesso";} else { echo "Erro ao criar o arquivo";}?>


Observe: o segundo parâmetro de addFile() define o caminho dentro do arquivo, permitindo organizar a estrutura de pastas.



2. Extraindo um arquivo ZIP

Para extrair todos os arquivos, utiliza-se o método extractTo():



<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) {    $zip->extractTo('/destination/folder/');    $zip->close();    echo "Arquivo extraído";} else {    echo "Não foi possível abrir o arquivo";}?>


Também é possível extrair apenas um arquivo específico, informando seu caminho interno como segundo argumento:

$zip->extractTo('/destination/', 'images/photo.jpg');


3. Lendo o conteúdo do arquivo sem extrair

Às vezes, é necessário apenas visualizar a lista de arquivos dentro do arquivo:



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


O método statIndex() retorna um array com informações: nome, tamanho, data de modificação, CRC32 e outros metadados.



Recursos avançados

Compressão com senha (PHP 7.2+)

A partir do PHP 7.2, o ZipArchive suporta criptografia com senha através do algoritmo AES-256:



<?php$zip = new ZipArchive();if ($zip->open('protected.zip', ZipArchive::CREATE) === TRUE) {    $zip->setPassword('supersecret');    $zip->addFile('document.pdf');    // Ativando a criptografia para o último arquivo adicionado    $zip->setEncryptionName('document.pdf', ZipArchive::EM_AES_256);    $zip->close();    echo "Arquivo criptografado criado                    

Recommendations