Ir para conteúdo

POWERED BY:

Arquivado

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

ldsbh

Zipando um arquivo

Recommended Posts

Galera,Vou pedir a ajuda de vocês...Já peguei um monte de scripts para zipar arquivos, mas não estou conseguindo...Alguém teria um funcionando redondo??? (se isso é possível... :P )Mas sei como é difícil a vida de um programador...O cliente quer e quer na hora...Assim a nossa vida....Conto com a ajuda dos amigos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

num entendi, você ker zipar em PHP ??? o.O

Sim...Quero que o próprio PHP comprima o arquivo desejado na hora do download...O próprio PHP gerando o ZIP... :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

system("zip -q /var/www/html/arquivos.zip arquivo1.php,arquivo2.php,arquivo3.php" , $retval);se for para pegar todos os arquivos do diretório é soh dale ao inves do nome dos arquivos dale um *

Compartilhar este post


Link para o post
Compartilhar em outros sites

Peguei este exemplo...Zipou os arquivos....Quando abre não dá erro:Mas acho que não está legal...Neste exemplo ele pega duas imagens e zipa...Mas quando você abre a imagem depois ela está vazia...O que pode ser?

<?php// Class definition found at http://www.zend.com/zend/spotlight/creating-zip-files3.php// Some alterations to the original posted code were made in order to get everything working properly// See example usage at the bottom of this pageclass zipfile{	var $datasec = array();	var $ctrl_dir = array();	var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";	var $old_offset = 0;	function add_dir($name) {  $name = str_replace("\\", "/", $name);  $fr = "\x50\x4b\x03\x04";  $fr .= "\x0a\x00";  $fr .= "\x00\x00";  $fr .= "\x00\x00";  $fr .= "\x00\x00\x00\x00";  $fr .= pack("V",0);  $fr .= pack("V",0);  $fr .= pack("V",0);  $fr .= pack("v", strlen($name) );  $fr .= pack("v", 0 );  $fr .= $name;  $fr .= pack("V", 0);  $fr .= pack("V", 0);  $fr .= pack("V", 0);  $this -> datasec[] = $fr;  $new_offset = strlen(implode("", $this->datasec));  $cdrec = "\x50\x4b\x01\x02";  $cdrec .="\x00\x00";  $cdrec .="\x0a\x00";  $cdrec .="\x00\x00";  $cdrec .="\x00\x00";  $cdrec .="\x00\x00\x00\x00";  $cdrec .= pack("V",0);  $cdrec .= pack("V",0);  $cdrec .= pack("V",0);  $cdrec .= pack("v", strlen($name) );  $cdrec .= pack("v", 0 );  $cdrec .= pack("v", 0 );  $cdrec .= pack("v", 0 );  $cdrec .= pack("v", 0 );  $ext = "\x00\x00\x10\x00";  $ext = "\xff\xff\xff\xff";  $cdrec .= pack("V", 16 );  $cdrec .= pack("V", $this -> old_offset );  $cdrec .= $name;  $this -> ctrl_dir[] = $cdrec;  $this -> old_offset = $new_offset;  return;	}	function add_file($data, $name) {  $fp = fopen($data,"r");  $data = fread($fp,filesize($data));  fclose($fp);  $name = str_replace("\\", "/", $name);  $unc_len = strlen($data);  $crc = crc32($data);  $zdata = gzcompress($data);  $zdata = substr ($zdata, 2, -4);  $c_len = strlen($zdata);  $fr = "\x50\x4b\x03\x04";  $fr .= "\x14\x00";  $fr .= "\x00\x00";  $fr .= "\x08\x00";  $fr .= "\x00\x00\x00\x00";  $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 .="\x00\x00\x00\x00";  $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;	}	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";	}}// Test this class$zipTest = new zipfile();$zipTest->add_dir("images/");$zipTest->add_file("images/box1.jpg", "images/box1.jpg");$zipTest->add_file("images/box2.jpg", "images/box2.jpg");// Return Zip File to BrowserHeader("Content-type: application/octet-stream");Header ("Content-disposition: attachment; filename=zipTest.zip");echo $zipTest->file();	// Alternatively, you can write the file to the file system and provide a link:  /*  	$filename = "output.zip";  	$fd = fopen ($filename, "wb");  	$out = fwrite ($fd, $zipTest -> file());  	fclose ($fd);  	echo "<a href=\"output.zip\">Click here to download the new zip file.</a>";  */?>
Eu testi com um TXT...Ele zipa beleza, mas o texto depois fica todo esquisito (sem quebra de linha)antes

Cooler Cyber Cooler para HD - HC-350 15,00  Cooler Cyber Cooler Slot - Exaustao -SC180 15,00 RCT 250,00 = 25,00

depois

Quando eu colei aqui voltou ao normal...Mas são uns quadrados que ficam no lugar da quebra de linha

O que está havendo???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Peguei essa classe a um tempo no phpclasses.org, usei várias vezes e sempre funcionou, pra quem quiser:

PHP [/tr][tr]<?php

class PHPZip {

function Zip($dir, $zipfilename) {

if (@function_exists('gzcompress')) {

$curdir = getcwd();

if (is_array($dir)) {

$filelist = $dir;

} else {

$filelist = $this -> GetFileList($dir);

}

if ((!empty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir);

else chdir($curdir);

if (count($filelist)>0) {

foreach($filelist as $filename) {

if (is_file($filename)) {

$fd = fopen ($filename, "r");

$content = fread ($fd, filesize ($filename));

fclose ($fd);

if (is_array($dir)) $filename = basename($filename);

$this -> addFile($content, $filename);

}

}

$out = $this -> file();

chdir($curdir);

$fp = fopen($zipfilename, "w");

fwrite($fp, $out, strlen($out));

fclose($fp);

}

return 1;

}

else return 0;

}

function GetFileList($dir) {

if (file_exists($dir)) {

$args = func_get_args();

$pref = $args[1];

$dh = opendir($dir);

while($files = readdir($dh)) {

if (($files!=".")&&($files!="..")) {

if (is_dir($dir.$files)) {

$curdir = getcwd();

chdir($dir.$files);

$file = array_merge($file, $this -> GetFileList("", "$pref$files/"));

chdir($curdir);

} else $file[]=$pref.$files;

}

}

closedir($dh);

}

return $file;

}

var $datasec = array();

var $ctrl_dir = array();

var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";

var $old_offset = 0;

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;

}

return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |

($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);

}

function addFile($data, $name, $time = 0) {

$name = str_replace('\a34f59274d50f313ec06e96e2620e117, '/', $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);

$c_len = strlen($zdata);

$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);

$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;

}

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";

}

}

?>

[/tr]

 

Pra usar, faz assim:

 

PHP [/tr][tr]$s = new PHPZip();

$files = array("imagem1.jpg","imagem2.jpg");

$s->Zip($file,"file.zip");

[/tr]

 

No array files você vai colocando os nomes dos arquivos, se for só um, nem precisa ser um array, é só colocar $files = "imagem1.jpg"; ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu esse erro aqui...

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\arquivos de programas\easyphp\www\zip2.php on line 72Parse error: parse error, unexpected T_STRING in c:\arquivos de programas\easyphp\www\zip2.php on line 72

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse aqui deu erro também!eval('$hexdtime = "' . $hexdtime . '";');Parse error: parse error, unexpected T_VARIABLE in c:\arquivos de programas\easyphp\www\zip2.php on line 76

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.