Copy CodeThe code is as follows:
/*
$Id: phpzip.php
*/
Class Phpzip {
var $datasec = array ();
var $ctrl _dir = Array ();
var $eof _ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
var $old _offset = 0;
function Zip ($dir, $zipfilename) {
if (@function_exists (' gzcompress ')) {
@set_time_limit ("0");
$this->openfile ($dir, $dir);
$out = $this-Filezip ();
$fp = fopen ($zipfilename, "w");
Fwrite ($fp, $out, strlen ($out));
Fclose ($FP);
}
}
function OpenFile ($path, $zipName) {
$temp _path = $path;
$temp _zip_path = $zipName;
$zipDir = $zipName;
if ($handle = @opendir ($path)) {
while (false!== ($file = Readdir ($handle))) {
if ($file! = '. ' and $file! = ' ... ') {
if (Ereg (' \. ', $file. @basename ())) {
$FD = fopen ($path. ' /'. $file, "R");
$fileValue = @fread ($FD, 1024000);
Fclose ($FD);
$this-AddFile ($fileValue, $zipName. '/' . $file);
} else {
$this->openfile ($path. ' /'. $file, $zipName. '/' . $file);
}
}
}
$zipName = $temp _zip_path;
$path = $temp _path;
Closedir ($handle);
}
}
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 (' \ \ ', '/', $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 Filezip () {
$data = Implode (", $this-datasec);
$ctrldir = Implode (", $this-Ctrl_dir);
Return
$data.
$ctrldir.
Eof_ctrl_dir, $this.
Pack (' V ', sizeof ($this-Ctrl_dir)).
Pack (' V ', sizeof ($this-Ctrl_dir)).
Pack (' V ', strlen ($ctrldir)).
Pack (' V ', strlen ($data)).
"\x00\x00";
}
}
?>
http://www.bkjia.com/PHPjc/320880.html www.bkjia.com true http://www.bkjia.com/PHPjc/320880.html techarticle Copy the code as follows:? PHP/* $Id: phpzip.php */class Phpzip {var $datasec = array (), var $ctrl _dir = Array (), Var $eof _ctrl_di r = "\x50\x4b\x05\x06\x00\x00\x00\x00"; var $o ...