Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

ayuda para usar una clase para comprimir archivos en el servidor !!!

Estas en el tema de ayuda para usar una clase para comprimir archivos en el servidor !!! en el foro de Frameworks y PHP orientado a objetos en Foros del Web. hola amigos!!!!!! mi problema es que ocupo comprimir un archivo en el servidor, el archivo es enviado desde el cliente, para hacer esto estoy usando ...
  #1 (permalink)  
Antiguo 08/07/2009, 12:33
 
Fecha de Ingreso: junio-2008
Mensajes: 50
Antigüedad: 16 años, 7 meses
Puntos: 0
ayuda para usar una clase para comprimir archivos en el servidor !!!

hola amigos!!!!!! mi problema es que ocupo comprimir un archivo en el servidor, el archivo es enviado desde el cliente, para hacer esto estoy usando una clase llamada zipfile que se encuentra en el archivo zipfile.php este archivo esta en la carpeta en donde estan todos mis archivos de mi pagina, el archivo que usa la clase zipfile se llama prueba_zip.php y tiene el siguiente codigo:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<? require ("zipfile.php");
$zipfile = new zipfile();
$zipfile->add_file(implode("",file("C:/AppServ/www/fichtec/1.pdf")), "C:/AppServ/www/fichtec/uno.pdf");
?>
</body>
</html>


al ejecutar la pagina prueba_zip.php me aparece los siguientes errores

Warning: file(C:/AppServ/www/fichtec/1.pdf) [function.file]: failed to open stream: No such file or directory in C:\AppServ\www\fichtec\prueba_zip.php on line 11

Warning: implode() [function.implode]: Bad arguments. in C:\AppServ\www\fichtec\prueba_zip.php on line 11

mi duda es!! que me esta ocacionando estos errores? porfa denme una ayuda!!!!


les dejo el codigo de la clase zipfile.php:

<?php
/*
Zip file creation class
makes zip files on the fly...

use the functions add_dir() and add_file() to build the zip file;
see example code below

by Eric Mueller
http://www.themepark.com

v1.1 9-20-01
- added comments to example

v1.0 2-5-01

initial version with:
- class appearance
- add_file() and file() methods
- gzcompress() output hacking
by Denis O.Philippov, [email protected], http://www.atlant.ru

*/

// official ZIP file format: http://www.pkware.com/appnote.txt

class zipfile
{

var $datasec = array(); // array to store compressed data
var $ctrl_dir = array(); // central directory
var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //end of Central directory record
var $old_offset = 0;

function add_dir($name)

// adds "directory" to archive - do this before putting any files in directory!
// $name - name of directory... like this: "path/"
// ...then you can add files using add_file with names like "path/file.txt"
{
$name = str_replace("\\", "/", $name);

$fr = "\x50\x4b\x03\x04";
$fr .= "\x0a\x00"; // ver needed to extract
$fr .= "\x00\x00"; // gen purpose bit flag
$fr .= "\x00\x00"; // compression method
$fr .= "\x00\x00\x00\x00"; // last mod time and date

$fr .= pack("V",0); // crc32
$fr .= pack("V",0); //compressed filesize
$fr .= pack("V",0); //uncompressed filesize
$fr .= pack("v", strlen($name) ); //length of pathname
$fr .= pack("v", 0 ); //extra field length
$fr .= $name;
// end of "local file header" segment

// no "file data" segment for path

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

$new_offset = strlen(implode("", $this->datasec));

// ext. file attributes mirrors MS-DOS directory attr byte, detailed
// at http://support.microsoft.com/support.../Q125/0/19.asp

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

$cdrec .= pack("V", $this -> old_offset ); //relative offset of local header
$this -> old_offset = $new_offset;

$cdrec .= $name;
// optional extra field, file comment goes here
// save to array
$this -> ctrl_dir[] = $cdrec;


}


function add_file($data, $name)

// adds "file" to archive
// $data - file contents
// $name - name of file in archive. Add path if your want

{
$name = str_replace("\\", "/", $name);
//$name = str_replace("\\", "\\\\", $name);

$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 .= "\x00\x00\x00\x00"; // last mod time and date

$unc_len = strlen($data);
$crc = crc32($data);
$zdata = gzcompress($data);
$zdata = substr( substr($zdata, 0, strlen($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;
// end of "local file header" segment

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

$new_offset = strlen(implode("", $this->datasec));

// 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 .="\x00\x00\x00\x00"; // 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", 0 ); //extra field length
$cdrec .= pack("v", 0 ); //file comment length
$cdrec .= pack("v", 0 ); //disk number start
$cdrec .= pack("v", 0 ); //internal file attributes
$cdrec .= pack("V", 32 ); //external file attributes - 'archive' bit set

$cdrec .= pack("V", $this -> old_offset ); //relative offset of local header
// echo "old offset is ".$this->old_offset.", new offset is $new_offset<br>";
$this -> old_offset = $new_offset;

$cdrec .= $name;
// optional extra field, file comment goes here
// save to central directory
$this -> ctrl_dir[] = $cdrec;
}

function file() { // dump out 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
}
}

?>
  #2 (permalink)  
Antiguo 08/07/2009, 14:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: ayuda para usar una clase para comprimir archivos en el servidor !!!

Código:
Warning: file(C:/AppServ/www/fichtec/1.pdf) [function.file]: failed to open stream: No such file or directory in C:\AppServ\www\fichtec\prueba_zip.php on line 11
El error es claro no existe el archivo.

Saludos.
  #3 (permalink)  
Antiguo 09/07/2009, 08:27
 
Fecha de Ingreso: junio-2008
Mensajes: 50
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: ayuda para usar una clase para comprimir archivos en el servidor !!!

muchas gracias!! GatorV! si efectivamente el archivo no existia en la carpeta, pero que cren ya me asegure de que el archivo si esta en la ruta C:/AppServ/www/fichtec/15.pdf, y al ejecutar la pagina ya no me marca el error pero el problema es que no me crea el archivo comprimido!!!.

me podrian orientar para ver que esta fallando?
  #4 (permalink)  
Antiguo 09/07/2009, 09:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: ayuda para usar una clase para comprimir archivos en el servidor !!!

Veo que en tu codigo te falta llamar a la funcion file() y ese podría ser el problema.

Saludos.
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 03:10.