Foros del Web » Programando para Internet » PHP »

crear archivo zip con varios archivos

Estas en el tema de crear archivo zip con varios archivos en el foro de PHP en Foros del Web. Hola amigos phperos les tengo un script muy bueno para crear un zip con n cantidad de archivos chequenlo a mi me latio mucho http://www.granthinkson.com/?p=19 ...
  #1 (permalink)  
Antiguo 07/09/2006, 00:34
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
De acuerdo crear archivo zip con varios archivos

Hola amigos phperos les tengo un script muy bueno
para crear un zip con n cantidad de archivos

chequenlo a mi me latio mucho
http://www.granthinkson.com/?p=19

<?php

// Class definition found at http://www.zend.com/zend/spotlight/c...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 page

class 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("Fotos_Uploads/");
$zipTest->add_file("D:/htdocs/WWW/sitio/morpheus/Fotos_Uploads/1/img-000011.jpg", "Fotos_Uploads/img-000011.jpg");
$zipTest->add_file("D:/htdocs/WWW/sitio/morpheus/Fotos_Uploads/1/img-000012.jpg", "Fotos_Uploads/img-000012.jpg");
$zipTest->add_file("D:/htdocs/WWW/sitio/morpheus/Fotos_Uploads/1/img-000010.jpg", "Fotos_Uploads/img-000010.jpg");
$zipTest->add_file("D:/htdocs/WWW/sitio/morpheus/Fotos_Uploads/1/img-000009.png", "Fotos_Uploads/img-000009.png");
$zipTest->add_file("D:/htdocs/WWW/sitio/morpheus/Fotos_Uploads/2/016.jpg", "Fotos_Uploads/016.jpg");
$zipTest->add_file("D:/htdocs/WWW/sitio/morpheus/Fotos_Uploads/2/019.jpg", "Fotos_Uploads/019.jpg");

//$zipTest->add_file("D:/htdocs/crear_zip/Strange_World_VI_1600_right.jpg", "D:/htdocs/crear_zip/Strange_World_VI_1600_right.jpg");

// Return Zip File to Browser
Header("Content-type: application/octet-stream");
Header("Content-disposition: attachment; filename=fotos_descargadas.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 "Click here to download the new zip file.";
*/
?>



saludos
__________________
gerardo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:40.