O PHP é uma linguagem fantástica e repleta de recursos que nos surpreende todos os dias.
Não é a primeira (e não será a última) vez que me pedem para implementar um recurso para compactar arquivos de um diretório e fazer o seu download para o usuário.
Com isso resolvi escrever um post para tentar auxiliar quem esteja necessitando de implementar um recurso similar.
A estrutura do projeto de exemplo será:
- diretorio_raiz
- index.php
- files
- imagem_01.jpg
- imagem_02.jpg
- imagem_03.jpg
- imagem_04.jpg
O arquivo index.php irá conter nossa lógica de programação.
O diretório files contém as imagens que iremos compactar e fazer o download.
Vamos implementar nosso arquivo index.php
Utilizarei uma classe nativa do PHP chamada ZipArchive uma poderosa classe que nos auxiliará e facilitará muito nossa manipulação de arquivos zip.
Vale observar que para usar esta classe é requerido a extensão Zip do PHP caso não esteja disponível basta executar o comando abaixo (ambiente linux) para instalar.
|
|
Com o comando acima eu instalo a extensão na versão 7.0 do PHP, caso deseja em outra versão basta substituir o número.
Antes de iniciar a codificação, nosso objetivo será:
- Ler os arquivos contido no diretório files.
- Criar o arquivo zip, contento as imagens do diretório.
- Baixar o arquivo zip.
- Remover o arquivo zip do servidor.
Após a instalação vamos iniciar nossa implementação da nossa lógica.
Primeiramente definimos nossa variáveis base;
|
|
Definimos o nome do arquivo, seu caminho e o caminho completo.
Agora necessitamos percorrer o diretório para varrer em busca de arquivos, e utilizaremos uma função nativa do PHP chamada scandir() esta função tem como responsabilidade listar arquivos e diretórios contidos do diretório que for passado.
|
|
Como podemos ver, passamos nosso path que foi declarado no início do nosso arquivo, ele irá percorrer e nos retornar um array com os nomes dos arquivos encontrados.
|
|
Como podemos ver ele retorna nos 02 primeiros incides do array os pontos de retorno do diretório, porem não iremos utilizar, então devemos remover.
|
|
Após a remoção o array ficará como o demonstrado abaixo.
|
|
Agora que dispomos dos arquivos que desejamos compactar, vamos iniciar o processo de criação do arquivo zip.
|
|
Após instanciarmos nossa classe, vamos verificar a criação do arquivo e percorrer o array que dispõem o nome dos arquivos para adiciona-los em nosso zip.
|
|
Agora se você rodar nosso arquivo index.php ele irá criar nosso arquivo zipFile.zip dentro do diretório files.
Como nossa última meta é baixar o arquivo para o usuário, vamos implementar nosso código para executar esta ação.
|
|
Agora basta executarmos novamente nosso arquivo index.php, e pronto é executado o download do nosso arquivo zip automaticamente.
Cabe uma observação, neste post eu adicionei ao arquivo zip apenas imagens jpg, porém podemos adicionar qualquer arquivo que desejarmos, png, xml, sql entre outros.
Vale lembrar também que esta é uma pequena demonstração, porém pode facilmente ser implementada e ampliada de acordo com sua necessidade 😉
Caso deseja, foi criado um repositório no GitHub zip_php para acessar os arquivos mencionados neste post.
Espero que tenham gostado, até a próxima pessoal