Crear archivos ZIP con PHP (Otra forma)
Posted on Nov 05 in PHPby adminPrint
Script que te permite Crear achivo ZIP, en tu hosting Linux, el cual resulta de gran utilidad por a la hora de comprimir archivos o ficheros en nuestro serve, para asi ahorranos espacio de disco duro, y reducir tambien la transferencia - cortesia de http://www.themepark.com - aqui esta el codigo:
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, webmaster@atlant.ru, http://www.atlant.ru
-
*/
-
// official ZIP file format: http://www.pkware.com/appnote.txt
-
-
class zipfile
-
{
-
var $eof_ctrl_dir = "x50x4bx05x06x00x00x00x00"; //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"
-
{
-
-
$fr = "x50x4bx03x04";
-
$fr .= "x0ax00"; // ver needed to extract
-
$fr .= "x00x00"; // gen purpose bit flag
-
$fr .= "x00x00"; // compression method
-
$fr .= "x00x00x00x00"; // last mod time and date
-
$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)
-
-
// add this entry to array
-
$this -> datasec[] = $fr;
-
-
// ext. file attributes mirrors MS-DOS directory attr byte, detailed
-
// at http://support.microsoft.com/support/kb/articles/Q125/0/19.asp
-
-
// now add to central record
-
$cdrec = "x50x4bx01x02";
-
$cdrec .="x00x00"; // version made by
-
$cdrec .="x0ax00"; // version needed to extract
-
$cdrec .="x00x00"; // gen purpose bit flag
-
$cdrec .="x00x00"; // compression method
-
$cdrec .="x00x00x00x00"; // last mod time & date
-
-
-
$ext = "x00x00x10x00";
-
$ext = "xffxffxffxff";
-
-
$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);
-
$fr = "x50x4bx03x04";
-
$fr .= "x14x00"; // ver needed to extract
-
$fr .= "x00x00"; // gen purpose bit flag
-
$fr .= "x08x00"; // compression method
-
$fr .= "x00x00x00x00"; // last mod time and date
-
-
$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)
-
-
// add this entry to array
-
$this -> datasec[] = $fr;
-
-
// now add to central directory record
-
$cdrec = "x50x4bx01x02";
-
$cdrec .="x00x00"; // version made by
-
$cdrec .="x14x00"; // version needed to extract
-
$cdrec .="x00x00"; // gen purpose bit flag
-
$cdrec .="x08x00"; // compression method
-
$cdrec .="x00x00x00x00"; // last mod time & date
-
-
// 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;
-
-
}
-
return
-
$data.
-
$ctrldir.
-
$this -> eof_ctrl_dir.
-
"x00x00"; // .zip file comment length
-
}
-
}
-
?>
Ejemplo:
PHP:
-
<?php
-
$zipfile = new zipfile();
-
-
// add the subdirectory ... important!
-
$zipfile -> add_dir("dir/");
-
-
// add the binary data stored in the string 'filedata'
-
$filedata = "(read your file into $filedata)";
-
$zipfile -> add_file($filedata, "dir/file.txt");
-
-
// the next three lines force an immediate download of the zip file:
-
-
-
// OR instead of doing that, you can write out the file to the loca disk like this:
-
$filename = "output.zip";
-
-
?>

