PHP 压缩文件夹的类
来源:网络来源TAG:压缩类浏览数: 日期:2010-8-20评论:

PHP 压缩文件夹的类代码,需要的朋友可以参考下。

折叠PHP Code复制内容到剪贴板
  1.   
  2. <?php    
  3. /*   
  4. $Id: PHPZip.php   
  5. */    
  6. class PHPZip {    
  7. var $datasec = array();    
  8. var $ctrl_dir = array();    
  9. var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";    
  10. var $old_offset = 0;    
  11. function Zip($dir$zipfilename) {    
  12. if (@function_exists('gzcompress')) {    
  13. @set_time_limit("0");    
  14. $this->openFile($dir,$dir);    
  15. $out = $this -> filezip();    
  16. $fp = fopen($zipfilename"w");    
  17. fwrite($fp$outstrlen($out));    
  18. fclose($fp);    
  19. }    
  20. }    
  21. function openFile($path$zipName) {    
  22. $temp_path = $path;    
  23. $temp_zip_path = $zipName;    
  24. $zipDir = $zipName;    
  25. if ($handle = @opendir($path)) {    
  26. while (false !== ($file = readdir($handle))) {    
  27. if($file !='.' and $file !='..'){    
  28. if(ereg('\.' , $file.@basename())) {    
  29. $fd = fopen($path.'/'.$file"r");    
  30. $fileValue = @fread ($fd, 1024000);    
  31. fclose ($fd);    
  32. $this -> addFile($fileValue$zipName . '/' . $file);    
  33. else {    
  34. $this ->openFile($path.'/'.$file$zipName . '/' . $file);    
  35. }    
  36. }    
  37. }    
  38. $zipName = $temp_zip_path;    
  39. $path = $temp_path;    
  40. closedir($handle);    
  41. }    
  42. }    
  43. function unix2DosTime($unixtime = 0) {    
  44. $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);    
  45. if ($timearray['year'] < 1980) {    
  46. $timearray['year'] = 1980;    
  47. $timearray['mon'] = 1;    
  48. $timearray['mday'] = 1;    
  49. $timearray['hours'] = 0;    
  50. $timearray['minutes'] = 0;    
  51. $timearray['seconds'] = 0;    
  52. }    
  53. return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |    
  54. ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);    
  55. }    
  56. function addFile($data$name$time = 0) {    
  57. $name = str_replace('\\', '/', $name);   
  58. $dtime = dechex($this->unix2DosTime($time));   
  59. $hexdtime = '\x' . $dtime[6] . $dtime[7]   
  60. . '\x' . $dtime[4] . $dtime[5]   
  61. . '\x' . $dtime[2] . $dtime[3]   
  62. . '\x' . $dtime[0] . $dtime[1];   
  63. eval('$hexdtime = "' . $hexdtime . '";');   
  64. $fr = "\x50\x4b\x03\x04";   
  65. $fr .= "\x14\x00";   
  66. $fr .= "\x00\x00";   
  67. $fr .= "\x08\x00";   
  68. $fr .= $hexdtime;   
  69. $unc_len = strlen($data);   
  70. $crc = crc32($data);   
  71. $zdata = gzcompress($data);   
  72. $c_len = strlen($zdata);   
  73. $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);   
  74. $fr .= pack('V', $crc);   
  75. $fr .= pack('V', $c_len);   
  76. $fr .= pack('V', $unc_len);   
  77. $fr .= pack('v', strlen($name));   
  78. $fr .= pack('v', 0);   
  79. $fr .= $name;   
  80. $fr .= $zdata;   
  81. $fr .= pack('V', $crc);   
  82. $fr .= pack('V', $c_len);   
  83. $fr .= pack('V', $unc_len);   
  84. $this -> datasec[] = $fr;   
  85. $new_offset = strlen(implode('', $this->datasec));   
  86. $cdrec = "\x50\x4b\x01\x02";   
  87. $cdrec .= "\x00\x00";   
  88. $cdrec .= "\x14\x00";   
  89. $cdrec .= "\x00\x00";   
  90. $cdrec .= "\x08\x00";   
  91. $cdrec .= $hexdtime;   
  92. $cdrec .= pack('V', $crc);   
  93. $cdrec .= pack('V', $c_len);   
  94. $cdrec .= pack('V', $unc_len);   
  95. $cdrec .= pack('v', strlen($name) );   
  96. $cdrec .= pack('v', 0 );   
  97. $cdrec .= pack('v', 0 );   
  98. $cdrec .= pack('v', 0 );   
  99. $cdrec .= pack('v', 0 );   
  100. $cdrec .= pack('V', 32 );   
  101. $cdrec .= pack('V', $this -> old_offset );   
  102. $this -> old_offset = $new_offset;   
  103. $cdrec .= $name;   
  104. $this -> ctrl_dir[] = $cdrec;   
  105.  
  106. function filezip() {   
  107. $data = implode('', $this -> datasec);   
  108. $ctrldir = implode('', $this -> ctrl_dir);   
  109. return   
  110. $data .   
  111. $ctrldir .   
  112. $this -> eof_ctrl_dir .   
  113. pack('v', sizeof($this -> ctrl_dir)) .   
  114. pack('v', sizeof($this -> ctrl_dir)) .   
  115. pack('V', strlen($ctrldir)) .   
  116. pack('V', strlen($data)) .    
  117. "\x00\x00";    
  118. }    
  119. }    
  120. ?>   
昨天新闻点击排行
一周新闻点击排行
当月新闻点击排行
新闻链接
上一篇文章:DISCUZ 分页代码
下一篇文章:mysql操作类
相关评论
正在加载评论列表...
评论表单加载中...