Foros del Web » Programando para Internet » PHP »

zip.lib.php archivo zip vacio

Estas en el tema de zip.lib.php archivo zip vacio en el foro de PHP en Foros del Web. Holas estoy haciendo un script que necesita zipear varios archivos para luego bajarlos, buscando en la red encontre esta libreria para zipear, hice una prueba ...
  #1 (permalink)  
Antiguo 03/10/2006, 10:30
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
zip.lib.php archivo zip vacio

Holas
estoy haciendo un script que necesita zipear varios archivos para luego bajarlos, buscando en la red encontre esta libreria para zipear, hice una prueba y me crea el archivo pero al abrirlo este se encuentra vacio
Código PHP:
<?php
/* $Id: zip.lib.php,v 1.1 2004/02/14 15:21:18 anoncvs_tusedb Exp $ */
// vim: expandtab sw=4 ts=4 sts=4:


/**
* Zip file creation class.
* Makes zip files.
*
* Last Modification and Extension By :
*
*  Hasin Hayder
*  HomePage : www.hasinme.info
*  Email : [email protected]
*  IDE : PHP Designer 2005
*
*
* Originally Based on :
*
*  http://www.zend.com/codex.php?id=535&single=1
*  By Eric Mueller <[email protected]>
*
*  http://www.zend.com/codex.php?id=470&single=1
*  by Denis125 <[email protected]>
*
*  a patch from Peter Listiak <[email protected]> for last modified
*  date and time of the compressed file
*
* Official ZIP file format: http://www.pkware.com/appnote.txt
*
* @access  public
*/
class zipfile
{
    
/**
     * Array to store compressed data
     *
     * @var  array    $datasec
     */
    
var $datasec      = array();

    
/**
     * Central directory
     *
     * @var  array    $ctrl_dir
     */
    
var $ctrl_dir     = array();

    
/**
     * End of central directory record
     *
     * @var  string   $eof_ctrl_dir
     */
    
var $eof_ctrl_dir "\x50\x4b\x05\x06\x00\x00\x00\x00";

    
/**
     * Last offset position
     *
     * @var  integer  $old_offset
     */
    
var $old_offset   0;


    
/**
     * Converts an Unix timestamp to a four byte DOS date and time format (date
     * in high two bytes, time in low two bytes allowing magnitude comparison).
     *
     * @param  integer  the current Unix timestamp
     *
     * @return integer  the current date in a four byte DOS format
     *
     * @access private
     */
    
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);
    } 
// end of the 'unix2DosTime()' method


    /**
     * Adds "file" to archive
     *
     * @param  string   file contents
     * @param  string   name of the file in the archive (may contains the path)
     * @param  integer  the current timestamp
     *
     * @access public
     */
    
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";            // ver needed to extract
        
$fr   .= "\x00\x00";            // gen purpose bit flag
        
$fr   .= "\x08\x00";            // compression method
        
$fr   .= $hexdtime;             // last mod time and date

        // "local file header" segment
        
$unc_len strlen($data);
        
$crc     crc32($data);
        
$zdata   gzcompress($data);
        
$zdata   substr(substr($zdata0strlen($zdata) - 4), 2); // fix crc bug
        
$c_len   strlen($zdata);
        
$fr      .= pack('V'$crc);             // crc32
        
$fr      .= pack('V'$c_len);           // compressed filesize
        
$fr      .= pack('V'$unc_len);         // uncompressed filesize
        
$fr      .= pack('v'strlen($name));    // length of filename
        
$fr      .= pack('v'0);                // extra field length
        
$fr      .= $name;

        
// "file data" segment
        
$fr .= $zdata;

        
// "data descriptor" segment (optional but necessary if archive is not
        // served as file)
        
$fr .= pack('V'$crc);                 // crc32
        
$fr .= pack('V'$c_len);               // compressed filesize
        
$fr .= pack('V'$unc_len);             // uncompressed filesize

        // add this entry to array
        
$this -> datasec[] = $fr;

        
// now add to central directory record
        
$cdrec "\x50\x4b\x01\x02";
        
$cdrec .= "\x00\x00";                // version made by
        
$cdrec .= "\x14\x00";                // version needed to extract
        
$cdrec .= "\x00\x00";                // gen purpose bit flag
        
$cdrec .= "\x08\x00";                // compression method
        
$cdrec .= $hexdtime;                 // last mod time & date
        
$cdrec .= pack('V'$crc);           // crc32
        
$cdrec .= pack('V'$c_len);         // compressed filesize
        
$cdrec .= pack('V'$unc_len);       // uncompressed filesize
        
$cdrec .= pack('v'strlen($name) ); // length of filename
        
$cdrec .= pack('v');             // extra field length
        
$cdrec .= pack('v');             // file comment length
        
$cdrec .= pack('v');             // disk number start
        
$cdrec .= pack('v');             // internal file attributes
        
$cdrec .= pack('V'32 );            // external file attributes - 'archive' bit set

        
$cdrec .= pack('V'$this -> old_offset ); // relative offset of local header
        
$this -> old_offset += strlen($fr);

        
$cdrec .= $name;

        
// optional extra field, file comment goes here
        // save to central directory
        
$this -> ctrl_dir[] = $cdrec;
    } 
// end of the 'addFile()' method


    /**
     * Dumps out file
     *
     * @return  string  the zipped file
     *
     * @access public
     */
    
function file()
    {
        
$data    implode(''$this -> datasec);
        
$ctrldir implode(''$this -> ctrl_dir);

        return
            
$data .
            
$ctrldir .
            
$this -> eof_ctrl_dir .
            
pack('v'sizeof($this -> ctrl_dir)) .  // total # of entries "on this disk"
            
pack('v'sizeof($this -> ctrl_dir)) .  // total # of entries overall
            
pack('V'strlen($ctrldir)) .           // size of central dir
            
pack('V'strlen($data)) .              // offset to start of central dir
            
"\x00\x00";                             // .zip file comment length
    
// end of the 'file()' method
   

    /**
     * A Wrapper of original addFile Function
     *
     * Created By Hasin Hayder at 29th Jan, 1:29 AM
     *
     * @param array An Array of files with relative/absolute path to be added in Zip File
     *
     * @access public
     */
    
function addFiles($files /*Only Pass Array*/)
    {
        foreach(
$files as $file)
        {
        if (
is_file($file)) //directory check
        
{
            
$data implode("",file($file));
                    
$this->addFile($data,$file);                    
                }
        }
    }
   
    
/**
     * A Wrapper of original file Function
     *
     * Created By Hasin Hayder at 29th Jan, 1:29 AM
     *
     * @param string Output file name
     *
     * @access public
     */
    
function output($file)www.hasinme.info
    
{
        
$fp=fopen($file,"w");
        
fwrite($fp,$this->file());
        
fclose($fp);
    }

   

// end of the 'zipfile' class
?>
y este es el codigo que utilizo
Código PHP:
include("zip.lib.php");
$ziper = new zipfile();
$ziper->addFiles(array("index.htm"));  //array of files 
//  the next three lines force an immediate download of the zip file:
  
header("Content-type: application/octet-stream");
  
header("Content-disposition: attachment; filename=test.zip");
  echo 
$ziper -> file(); 
el archivo index existe y esta en el mismo directorio que este script
  #2 (permalink)  
Antiguo 04/10/2006, 11:25
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
woah que rapido bajan aca los mensajes xD
nadie sabe?
  #3 (permalink)  
Antiguo 04/10/2006, 11:34
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 10 meses
Puntos: 0
Yo uso para comprimir la pclzip y funciona a las mil maravillas comprimiendo carpetas enteras en lugar de un array de archivos.

Para hacer backups junto a un cron q haga la llamada y descargue o mueva los archivos a la ubicación deseada es de lo mejorcito. Además, aunque pegara un timeout error la creación del archivo no se corta. Si quieres probarla clickea en el enlace.

Agrego ejemplo de uso pa q vean la simplicidad:

Código PHP:
<?php
//Define la carpeta om carpetas a comprimir. 
//Por ejemplo $carpeta = "../wwwroot/";
$carpeta "../db,../wwwroot,../BDD_PMOVIL";
//Define el nombre y ruta del archivo .zip a crear
//Por ejemplo $archivo = "../backup.zip";
$archivo "../backup_rentelweb.zip";

//Empieza el codigo. NO MODIFICAR NADA DE AQUI ABAJO
include_once('pclzip.lib.php');
set_time_limit (0);
$zip = new PclZip($archivo);
$func=$zip->create($carpeta);
if (
$func==0) {
    echo 
"El proceso de creacion del archivo ha fallado.<br>";
} else {
    echo 
"El archivo ha sido creado con exito.<br>";
}
?>
Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #4 (permalink)  
Antiguo 04/10/2006, 12:21
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
[bleh..]
Ooh ya vi que se puede ver el sitio tambien en ingles, heh gracias lo probare :)

Última edición por darkasecas; 04/10/2006 a las 12:28
  #5 (permalink)  
Antiguo 04/10/2006, 12:26
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 10 meses
Puntos: 0
Te he puesto un ejemplo para comprimir carpetas completas pero en la documentación (en inglés o francés) seguro q encuentras como hacerlo para archivos sueltos. Solo q yo te he puesto el ejemplo xq sólo la he usado para backups de carpetas completas y no me ha dado x buscar como hacerlo con archivos sueltos.

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #6 (permalink)  
Antiguo 04/10/2006, 12:43
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Wooo funciono de maravilla :D
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 16:31.