Gerando Arquivos ZIP Dinamicamente
Um bom habito para aprender programar em qualquer linguagem é estudar códigos já prontos.
Eu tinha acabado de baixar o phpMyAdmin 2.2.6 ( http://phpmyadmin.sourceforge.net ), e após configurá-lo comecei a fuçar nos scripts contidos. Achei um script com nome zip.lib.php e passei a “brincar com ele”.
Mas antes que vocês possam “brincar” também, é necessário habilitar a biblioteca Zlib (funções para compressão de dados - http://www.php.net/manual/pt_BR/ref.zlib.php).
Em algumas versões do PHP para win32 é só editar o arquivo php.ini, indo na linha que contém ;extension=php_zlib.dll ,retirando o “;”.
O script do zip.lib.php :
Eu tinha acabado de baixar o phpMyAdmin 2.2.6 ( http://phpmyadmin.sourceforge.net ), e após configurá-lo comecei a fuçar nos scripts contidos. Achei um script com nome zip.lib.php e passei a “brincar com ele”.
Mas antes que vocês possam “brincar” também, é necessário habilitar a biblioteca Zlib (funções para compressão de dados - http://www.php.net/manual/pt_BR/ref.zlib.php).
Em algumas versões do PHP para win32 é só editar o arquivo php.ini, indo na linha que contém ;extension=php_zlib.dll ,retirando o “;”.
O script do zip.lib.php :
<?php class zipfile { /** * Array para armazenar dados comprimidos * * @var array $datasec */ var $datasec = array(); /** * diretório central * * @var array $ctrl_dir */ var $ctrl_dir = array(); /** * Fim do registro do diretório central * * @var string $eof_ctrl_dir */ var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; /** * Posição do último offset * * @var integer $old_offset */ var $old_offset = 0; /** * Converte a data no formato Unix para formato DOS * */ function unix2DosTime($unixtime = 0) { $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); if ($timearray['year'] < 1980) { $timearray['year'] = 1980; $timearray['mon'] = 1; $timearray['mday'] = 1; $timearray['hours'] = 0; $timearray['minutes'] = 0; $timearray['seconds'] = 0; } // end if return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); } /** * Adiciona um "arquivo" no formato zip. */ function addFile($data, $name, $time = 0) { $name = str_replace('\\', '/', $name); $dtime = dechex($this->unix2DosTime($time)); $hexdtime = '\x' . $dtime[6] . $dtime[7] . '\x' . $dtime[4] . $dtime[5] . '\x' . $dtime[2] . $dtime[3] . '\x' . $dtime[0] . $dtime[1]; eval('$hexdtime = "' . $hexdtime . '";'); $fr = "\x50\x4b\x03\x04"; $fr .= "\x14\x00"; $fr .= "\x00\x00"; $fr .= "\x08\x00"; $fr .= $hexdtime; $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($data); $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); $c_len = strlen($zdata); $fr .= pack('V', $crc); $fr .= pack('V', $c_len); $fr .= pack('V', $unc_len); $fr .= pack('v', strlen($name)); $fr .= pack('v', 0); $fr .= $name; $fr .= $zdata; $fr .= pack('V', $crc); $fr .= pack('V', $c_len); $fr .= pack('V', $unc_len); $this -> datasec[] = $fr; $new_offset = strlen(implode('', $this->datasec)); $cdrec = "\x50\x4b\x01\x02"; $cdrec .= "\x00\x00"; $cdrec .= "\x14\x00"; $cdrec .= "\x00\x00"; $cdrec .= "\x08\x00"; $cdrec .= $hexdtime; $cdrec .= pack('V', $crc); $cdrec .= pack('V', $c_len); $cdrec .= pack('V', $unc_len); $cdrec .= pack('v', strlen($name) ); $cdrec .= pack('v', 0 ); $cdrec .= pack('v', 0 ); $cdrec .= pack('v', 0 ); $cdrec .= pack('v', 0 ); $cdrec .= pack('V', 32 ); $cdrec .= pack('V', $this -> old_offset ); $this -> old_offset = $new_offset; $cdrec .= $name; $this -> ctrl_dir[] = $cdrec; } /** * * * Retorna um string contento um arquivo zip * * */ function file() { $data = implode('', $this -> datasec); $ctrldir = implode('', $this -> ctrl_dir); return $data . $ctrldir . $this -> eof_ctrl_dir . pack('v', sizeof($this -> ctrl_dir)) . pack('v', sizeof($this -> ctrl_dir)) . pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00"; } } ?>
Páginas:
1
2
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
(~18 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?
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;
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
(~19 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)
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
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)
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
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.
mysqldunp seu_bando_de_dump > backup.sql.
Agora via php ,tenho que criar.
24/06/2002 11:28am
(~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)