Guber 0 Denunciar post Postado Abril 29, 2003 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
hinom 5 Denunciar post Postado Abril 29, 2003 vai no phpbrasil.com em scripts Compartilhar este post Link para o post Compartilhar em outros sites
Guber 0 Denunciar post Postado Abril 29, 2003 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
DanielGianni 0 Denunciar post Postado Abril 29, 2003 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
silderado 0 Denunciar post Postado Junho 7, 2004 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