yxpblog

首先将压缩代码Zip.php放到php目录中

//zip.php

<?php 
/* 
$Id: PHPZip.php 
*/ 
error_reporting(0);
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 . 
  $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"; 
} 
} 
?>

  

 

//接下来就是你可以通过一下代码压缩你想压缩的文件夹,文件等。

 $zip = new PHPZip();
 $zip -> Zip("你将要压缩文件夹或文件","压缩后文件的名称");

eg:$Zip = new PHPZip();

     $Zip ->Zip("F:\wamp\www\DTX","DTX.zip");

分类:

技术点:

相关文章:

猜你喜欢
相关资源
相似解决方案