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:
Instanciando a classe:PHP
require_once('../PEAR/Archive_Tar/Archive/Tar.php');www.revistaphp.com.br
PHP
$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.
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
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.PHP
if ( ($file_list = $tar->ListContent()) != 0) { // este foreach, lista os arquivos incluídos, e seu respectivo tamanho. foreach ($file_list as $v) { $v['filename'],$v['size']); } }www.revistaphp.com.br
Para gravar o TAR definitivo gerado acima no local correto, usamos:
PHP
$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.
Dúvidas?
Comente aqui!