Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guber

Compactar arquivo no cliente.

Recommended Posts

Eu tenho um sistema de envio e recepção de arquivos que quero passar para uma interface Web.Testei as funções de FTP do PHP e funcionaram tranquilamente... só que existe um problema. Quando o usuário for enviar o arquivo o sistema precisa compactá-lo (usando o ARJ ou ZIP).Existe alguma forma de fazer isso pelo browser ?Se não for possível, alguém me dá alguma dica de alternativas que eu teria pra compactar esses arquivos.Obrigado,Guber

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá... valeu pela resposta no fórum ...estou procurando no phpbrasil.com e não estou achando... existe um script para compactar arquivos no cliente (antes de enviar ) ??você poderia me indicar qual ?Valeu!!!Guber

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, existe um classe que você gera .ZIP no php. Mas no caso você queria gerar não no servidor e sim no cliente, certo?

Só vejo como solução, você gerar um aplicação PHP-GTK para rodar no Cliente.

 

A classe para o servidor segue abaixo:

 

<?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";                                  } } ?>
Um exemplo de como usar:

 

<?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); ?>
Ps.: Extraído de Artigo do PHPBrasil

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa!! fala ae hinom

 

Estou usando o script que você indicou aqui neste post... mas esta acontecendo um erro que nao estou conseguindo encontrar a origem..

da uma olhada no codigo pra mim..

 

<?include('../db.inc.php');include('../zip.lib.php');$rs = mysql_query("select email, status from tbl_lista where cod_cliente=$cod order by email", $db);$total = mysql_num_rows($rs);$arquivo = "lista_$cod.xml";$ponteiro = fopen($arquivo, "w");fwrite($ponteiro, "<?xml version=\"1.0\"?>\r\n");fwrite($ponteiro, "<lista>\r\n");if($total>0){	for($i=0; $i<$total; $i++){  $email  = mysql_result($rs,$i,"email");  $status = mysql_result($rs,$i,"status");  $conteudo = "<contato>\r\n";  $conteudo .= "	<email>$email</email>\r\n";  $conteudo .= "	<status>$status</status>\r\n";  $conteudo .= "</contato>\r\n";  fwrite($ponteiro, $conteudo);	};		fwrite($ponteiro, "</lista>");	fclose($ponteiro);};mysql_free_result($rs);mysql_close($db);// Pegando o arquivo e gerando um .zip$arquivoZIP = "lista_$cod.xml";$abre1ZIP = fopen($arquivoZIP, "r");fclose($abre1ZIP);$zip = new zipfile;$zip->addFile($abre1ZIP, "$arquivoZIP");$strzip=$zip->file();$arqZIP = "lista_$cod.zip";$abreZIP = fopen($arqZIP, "w");$salvaZIP = fwrite($abreZIP, $strzip);fclose($abreZIP);?>
Esse codigo gera um XML e logo em seguinda compacta o mesmo.

mas qdo vou tentar descompactar um erro é exibido.

 

! C:\home\sys\xml\lista_24.zip: Falha de CRC em lista_24.xml. O arquivo está corrompido

você sabe o que é isso???

valeu.

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.