Palavra:   

Revista PHP / PHP

Flávia Jobstraibizer

Analista de sistemas, DBA Mysql, PostgreSQL, Oracle, SQLServer e Firebird. Desenvolvedora de sistemas, e administradora de servidores FreeBSD. Conheça o site www.flaviajobs.com.br

Pear parte 3 - Gerando arquivos TAR

Existem algumas boas práticas em tráfego e armazenamento de arquivos, e uma das que mais gosto, é o agrupamento de arquivos em formato TAR.

O TAR é um formato de arquivamento de arquivos bastante eficiente e flexível. Apesar do nome "tar" ser derivado de "tape archive", o seu uso não se restringe a fitas magnéticas. Ele se tornou largamente usado para armazenar vários arquivos em um único, preservando informações como datas e permissões. Normalmente é produzido pelo comando "tar". Arquivos com a extensão TAR, podem ser abertos pelo Winrar.

O único contra do TAR, é não compactar os arquivos. Pra isso, recomendo arquivar em modo ZIP. Mas para trafegar informações de vários arquivos entre servidores, fazer backups, gerar relatórios de muitas páginas para envio ou gravação em drives, etc, recomendo alplamente o TAR. Até mesmo para distribuir pacotes de códigos e programas em PHP, o melhor meio é o TAR.

Utilizando a biblioteca Archive_Tar do PEAR, torna-se muito prática a geração de pacotes de arquivos. Poucos comandos, e ampla flexibilidade de customização, são os prós de uso detse pacote do Pear.

Instale via linha de comando ou aponte o diretório (como no caso deste artigo) da classe do pacote Archive_Tar:

PHP
  1. require_once('../PEAR/Archive_Tar/Archive/Tar.php');
www.revistaphp.com.br
Instanciando a classe:
PHP
  1. $tar = new Archive_Tar('./teste.tar');
www.revistaphp.com.br

No caso dei o nome de "teste.rar" ao arquivo que vou gerar.
Vou criar arquivos estáticos dentro do tar gerado. Mas você pode flexibilizar ao máximo o uso da classe, trazendo arquivos dinâmicos (como backups .sql de um banco de dados por exemplo) e incluindo dentro do arquivo, gerando um tar dinâmico.
No meu exemplo, estou incluindo o script completo deste artigo, mais um arquivinho php.ini básico.

PHP
  1. $tar->create(array('tar_pear.php'));
  2. $tar->add(array('php.ini'));
www.revistaphp.com.br
A próxima etapa de criação deste arquivo, é listar o conteúdo inserido (se você não precisa ver o que tem no arquivo, basta retirar este if. A função ListContent da classe Tar.php do Archive_Tar, é responsável por esta listagem dos arquivos incluídos.
PHP
  1. if ( ($file_list = $tar->ListContent()) != 0) {
  2. // este foreach, lista os arquivos incluídos, e seu respectivo tamanho.
  3. foreach ($file_list as $v) {
  4. printf("Arquivo incluído: %s Tamanho: %d bytes<br>",
  5. $v['filename'],$v['size']);
  6. }
  7. }
www.revistaphp.com.br
Uma rápida explicação de como o arquivo foi gerado: Você deu um nome ao TAR, e indicou que arquivos incluir dentro dele. O arquivo é criado na pasta temporária do servidor, geralmente pasta /tmp (Não estou falando de servidores Windows e nem testo scripts PHP em servidores Windows). Então se o TAR foi gerado na pasta /tmp do servidor, é preciso gravá-lo após todas as tarefas concluídas, no local correto. Note que na linha onde instanciamos a classe, existe um ./ indicando que quero gravar o TAR na mesma pasta onde estou executando este script em que estamos trabalhando. Você pode setar outro local para a gravação do arquivo.

Para gravar o TAR definitivo gerado acima no local correto, usamos:

PHP
  1. $tar->extract('/tmp/Archive/');
www.revistaphp.com.br

Extraindo assim o arquivo gravado da minha pasta temporária (no caso tmp/Archive) e gravando na mesma pasta do script.
Para facilitar o download do arquivo gerado, apenas coloquei um: echo "Download do arquivo: <a href='teste.tar'>teste.tar</a>"; na última linha, mas você pode efetuar diversas ações com este arquivo, como enviá-lo por email, apenas gravar para que alguém efetue download, ou mesmo colocar um header para forçar o download do arquivo após a geração do mesmo.

Para ver o arquivo tar que gerei neste artigo, clique aqui.

Dúvidas?
Comente aqui!

Opções de Interação