+4

Gerando Arquivos ZIP Dinamicamente

criado por Rodrigo Romano Moreira em 21/05/2002 5:51pm
Um pequeno exemplo do uso da classe zipfile:

<?php
require("zip.lib.php");

$arq1 = "teste.txt"; //nome do arquivo a ser compactado
$arq2 ="hehehe.php"; //nome do arquivo a ser compactado
$arq3="data.txt"; //nome do arquivo a ser compactado

$abre1 = fopen($arq1, "r");
$com1 = fread($abre1, filesize($arq1)); //string contendo o arquivo a ser compactado
fclose($abre1);

$abre2 = fopen($arq2, "r");
$com2 = fread($abre2, filesize($arq2)); //string contendo o arquivo a ser compactado
fclose($abre2);

$abre3 = fopen($arq3, "r");
$com3 = fread($abre3, filesize($arq3)); //string contendo o arquivo a ser compactado
fclose($abre3);

$zip= new zipfile; //cria o objeto
$zip->addFile($com1,"test/$arq1"); //adiciona um arquivo ao zip
$zip->addFile($com2,"$arq2"); //adiciona um arquivo ao zip
$zip->addFile($com3,"test/int/$arq3"); //adiciona um arquivo ao zip

$strzip=$zip->file(); //string contendo o arquivo zip

$arq="back.zip";

$abre = fopen($arq, "w");
$salva = fwrite($abre, $strzip);
fclose($abre);

?>

Bem o resultado é o seguinte :


Dá para notar que para criar diretórios no arquivo zip é só acrescentar antes da string com o nome do arquivo o diretório (nome) e uma "/", como eu fiz com $arq1 e $arq3.

Bem para obter mais informações sobre o funcionamento da classe zipfile é so ir ao site http://www.zend.com/zend/spotlight/creating-zip-files1.php . Mas vou logo avisando que não funciona, por sorte o pessoal do phpMyAdmin (versão 2.2.6) corrigiu e ele está na pasta "libraries" com o nome zip.lib.php .

Agora é só usar a criatividade. Aqui vão algumas sugestões:

1) Um sistema de backup para sua página.
2) Usando "header" você pode criar um sistema de downloads para usuários do site. (João fica a sugestão para seção de artigos, além de imprimir ele teria a opção para download).
3) Criar um offline browser. (Prometo João que não vou testar no site do PHPBRASIL).

Rodrigo Romano Moreira

Comentários:

Mostrando 1 - 10 de 13 comentários
Por exemplo eu envio um arquivo zip p o servidor e este dezipa e poe os arquivos e nao o zip, ex: fotos;
28/02/2007 12:19pm (~17 anos atrás)

Eu gostaria de saber como faria para compactar alguns diretorios no meu site com essa classe.

Desculpem a ignorancia, é que sou programador coldfusion, e estou engatinhando no PHP, alguém poderia me dar um help?
29/06/2006 7:26am (~18 anos atrás)

Eu estou com um problema quando o download é muito grande tipo 15 mega quando chega a + ou - 40% ele para de baixar diz q a rede foi reconfigurada porq ?
alguem pode me ajudar.
a configuração do download:

$tamanho=strlen($arquivozip);
header("Content-Type: application/octet-stream; name=".$arquivo);
header("Content-Length: ".$tamanho);
header("Content-Transfer-Encoding: binary");
header("Accept-Ranges: none");
header("Content-Disposition: attachment; filename=".$arquivo."\n");
echo $arquivozip;
29/03/2006 3:52pm (~18 anos atrás)

Tem como eu colocar uma mensagem de operção efetuada com sucesso! ou uma de Erro !?
10/12/2004 7:38am (~20 anos atrás)

Hugo Calixto disse:
Fala ae Rodrigo,

Quase estava ficando louco de procurar uma classe que zipasse.

Crio alguns txt´s e agora graças a esse artigo, faço zip deles, agora queria pedir uma ajuda ou uma sugestão. Esses txt´s que gero eles vão com conteúdo em fomato cvs, daí um software lê eles e faz as devidas atualizações, meu pedido é o seguinte :

Zipar e por uma senha no arquivo
ou
Criptografar os dados de um campo (apenas um campo - o senha), quando gerar o txt

Abaixo segue o script que gera o txt.

<?
include("../config.php");
$db = mysql_connect($host, $user, $pass); //conectamos ao mysql
$basedados = mysql_select_db($base); //selecionamos o database escolhido

//Gera O autoridade.txt
// Pega os Dados de seu Banco (No exmplo uso MySQL www.mysql.org)
$sql_sales = mysql_query("SELECT * FROM autoridade ");
$contagem = mysql_num_rows($sql_sales); //traz o resultado da pesquisa acima
// Cria uma Varaivel e Lista
$arquivo = 'autoridade';
while ($datas = mysql_fetch_array($sql_sales)) {
$arquivo_text .= "$datas[id], '$datas[senha]', '$datas[nomeprofissional]', '$datas[orgao]', '$datas[cargo]', '$datas[setor]', '$datas[posicao]'\n";
}

$exte = (isset($cvs)) ? '.cvs' : '.txt';
$abbre = fopen(autoridade.$exte, "w+");
fwrite($abbre, $arquivo_text);
fclose($abbre);
?>


Meu problema é ir os dados do campo senha, os demais dados é tranquilo

Ah ! o software do cara é em delphi

Se puder me ajudar ficarei muito agradecido

Muito obrigado

email : calixtorj@hotmail.com

Hugo

25/11/2004 12:39am (~20 anos atrás)

Cristiano disse:
Olá amigos.

Por acaso php_zip.dll tem as mesmas funções que php_zlib.dll, pois quando tento carregar ambas, recebo várias mensagens de erro.
Então resolvi deixar apenas a php_zip.dll, mas o interessante é que ao consultar a função phpinfo() percebi que a zlib estava rodando.
Estou meio confuso quanto a isso.

Alguém pode clarear minhas idéias?

[]s

Cristiano
kinhu@tijucas.com
25/04/2004 10:48am (~20 anos atrás)

Bom ,no mysql (via terminal) você pode usar o comando
mysqldunp seu_bando_de_dump > backup.sql.
Agora via php ,tenho que criar.
24/06/2002 11:28am (~22 anos atrás)

Eu uso phptriad tambem,a biblioteca zlib já vem instalada.
15/06/2002 2:53pm (~22 anos atrás)

Não sei qual é o problema,mas posso enviar o meu arquivo que eu uso.
11/06/2002 7:11am (~22 anos atrás)

http://kromann.info/php4.php, legal que ele tem todos dll´s para win32(até gd).
24/05/2002 10:10pm (~22 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)