Nenhum produto encontrado nessa seleção.
Neste tutorial veremos como compactar pastas em PHP com a extensão .zip. No final vou passar uma função para facilitar seu dia a dia em desenvolvimento de aplicativos e/ou páginas da web.
Volta e meia precisamos gerar arquivos de backup, relatórios ou qualquer tipo de documentos que seus clientes precisam baixar da sua aplicação.
O PHP torna a criação de pastas compactadas bem fácil para o desenvolvedor, com apenas algumas linhas de código você pode criar a pasta compactada e adicionar quantos arquivos desejar na mesma.
Veja como compactar pastas com PHP no tutorial abaixo.
Criando um arquivo .ZIP com PHP
Para concluir este tutorial, vamos utilizar uma classe nativa do PHP 5.2, ou superior, chamada ZipArchive.
Com apenas algumas linhas de código você já pode criar um arquivo zipado, veja o exemplo:
// Cria uma pasta compactada $zip = new ZipArchive; $zip->open( 'nome_do_arquivo.zip', ZipArchive::CREATE); // Adiciona um arquivo à pasta $zip->addFile( 'caminho_do_arquivo_para_incluir', 'nome_do_arquivo_compactado' ); // Fecha a pasta e salva o arquivo $zip->close();
Agora basta substituir os nomes com um underline (_) para os nomes dos seus arquivos, exemplo:
<?php // Inicia a instância da classe ZipArchive $zip = new ZipArchive; // Cria um novo arquivo .zip chamado minhas_fotos.zip $zip->open( 'minhas_fotos.zip', ZipArchive::CREATE); // Adiciona um arquivo à pasta $zip->addFile( // Caminho do arquivo original 'fotos/foto.jpg', // Novo nome do arquivo 'foto_1.jpg' ); // Fecha a pasta e salva o arquivo $zip->close();
Isso deverá:
- Ggerar uma pasta compactada chamada "minhas_fotos.zip";
- colocar o arquivo "foto.jpg" dentro da pasta;
- alterar o nome do arquivo para "foto_1.jpg".
Veja o arquivo gerado:
Função reutilizável
Criei uma função que faz tudo para você, basta incluí-la nos seus arquivos e utilizar.
<?php /** * Cria arquivos compactados .zip * * @author Luiz Otávio Miranda <[email protected]/w> * @param string $path Caminho para o arquivo zip que será criado * @param array $files Arquivos que serão adicionados ao zip * @param bool $deleleOriginal Apaga os arquivos originais quando true * * Exemplo de uso: * * $folder_name = 'pasta_com_arquivos'; * $folder = glob($folder_name . '/*'); * createZip( 'meu_arquivo.zip', $folder, false ); */ function createZip ( $path = 'arquivo.zip', $files = array(), $deleleOriginal = false ) { /** * Cria o arquivo .zip */ $zip = new ZipArchive; $zip->open( $path, ZipArchive::CREATE); /** * Checa se o array não está vazio e adiciona os arquivos */ if ( !empty( $files ) ) { /** * Loop do(s) arquivo(s) enviado(s) */ foreach ( $files as $file ) { /** * Adiciona os arquivos ao zip criado */ $zip->addFile( $file, basename( $file ) ); /** * Verifica se $deleleOriginal está setada como true, * se sim, apaga os arquivos */ if ( $deleleOriginal === true ) { /** * Apaga o arquivo */ unlink( $file ); /** * Seta o nome do diretório */ $dirname = dirname( $file ); } } /** * Verifica se $deleleOriginal está setada como true, * se sim, apaga a pasta dos arquivos */ if ( $deleleOriginal === true && !empty( $dirname ) ) { rmdir( $dirname ); } } /** * Fecha o arquivo zip */ $zip->close(); } ?>
Para utilizá-la você só precisa enviar os arquivos em um array:
// Arquivos para serem incluídos na pasta compactada $arquivos = array( 'caminho/do/arquivo.extensão', 'caminho/do/arquivo.extensão', 'caminho/do/arquivo.extensão' ); // Compacta createZip( 'nome_do_arquivo.zip', $arquivos );
Simples assim!