Este é mais um artigo sobre recursos úteis a serem adicionados em sistemas de informação para WEB. Já vimos nos artigos anteriores dicas importantes e úteis como;
Criando arquivos PDF com jQuery e Convert Api
Como criar um arquivo do Word (.DOC) com PHP
Como gerar um arquivo do Excel com PHP
E agora vamos aprender a compactar uma pasta com PHP. Este recurso é útil para sistemas WEB que possuem sistemas de Uploads de arquivos, ou sistema que necessitam gerar backups php periódicamente de determinadas pastas (Uma pasta que armazena XML de NF-e por exemplo);
Código PHP para compactar uma pasta
Para exemplificar este código eu criei a seguinte estrutura de arquivos e pastas;
É importante saber que as pastas imagens, pasta 01 e pasta 02 não estão vazias, caso contrário elas não serão compactadas.
Note também que temos dois arquivos PHP, sendo o index.php e o backup-zip.php, vamos programar primeiro o backup-zip.php contendo o seguinte código;
<?php // Define o nome do nosso pacote Zip. $arquivo = 'backup.zip'; // Apaga o backup anterior para que ele não seja compactado junto com o atual. if (file_exists($arquivo)) unlink(realpath($arquivo)); // diretório que será compactado $diretorio = "./"; // aqui estou compactando a pasta raiz do sistema. $rootPath = realpath($diretorio); // Inicia o Módulo ZipArchive do PHP $zip = new ZipArchive(); $zip->open($arquivo, ZipArchive::CREATE | ZipArchive::OVERWRITE); // Compactação de subpastas $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($rootPath), RecursiveIteratorIterator::LEAVES_ONLY ); // Varre todos os arquivos da pasta foreach ($files as $name => $file) { if (!$file->isDir()) { $filePath = $file->getRealPath(); $relativePath = substr($filePath, strlen($rootPath) + 1); // Adiciona os arquivos no pacote Zip. $zip->addFile($filePath, $relativePath); } } // Encerra a criação do pacote .Zip $zip->close(); $arquivo = 'backup.zip'; // define o nome do pacote Zip gerado na 9 if(isset($arquivo) && file_exists($arquivo)){ // faz o teste se a variavel não esta vazia e se o arquivo realmente existe switch(strtolower(substr(strrchr(basename($arquivo),"."),1))){ // verifica a extensão do arquivo para pegar o tipo case "pdf": $tipo="application/pdf"; break; case "exe": $tipo="application/octet-stream"; break; case "zip": $tipo="application/zip"; break; case "doc": $tipo="application/msword"; break; case "xls": $tipo="application/vnd.ms-excel"; break; case "ppt": $tipo="application/vnd.ms-powerpoint"; break; case "gif": $tipo="image/gif"; break; case "png": $tipo="image/png"; break; case "jpg": $tipo="image/jpg"; break; case "mp3": $tipo="audio/mpeg"; break; case "php": // deixar vazio por segurança case "htm": // deixar vazio por segurança case "html": // deixar vazio por segurança } header("Content-Type: ".$tipo); // informa o tipo do arquivo ao navegador header("Content-Length: ".filesize($arquivo)); // informa o tamanho do arquivo ao navegador header("Content-Disposition: attachment; filename=".basename($arquivo)); // informa ao navegador que é tipo anexo e faz abrir a janela de download, tambem informa o nome do arquivo readfile($arquivo); // lê o arquivo exit; // aborta pós-ações } ?>
Agora vamos programar o index.php, ele na verdade terá apenas um link para o arquivo backup-zip.php;
<a href="backup-zip.php">Fazer backup dos arquivos</a>
O legal é que quando clicarmos no link o arquivo de backup forçará o download.
Sistema de compactação de arquivos em PHP – Exemplo para download
Como é de praxe, todos os exemplos mostrados no Blogson também são disponibilizados para download. Se você gosta dos artigos publicados no Blogson não esqueça de nos seguir no Facebook e deixar o seu Like.