国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > PHP > 正文

php文件在線壓縮程序類(lèi)

2024-09-04 11:44:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

提供一款超完美的php文件在線壓縮程序,原理很簡(jiǎn)單就是把文件以二進(jìn)制形式保存了,以前用過(guò)利用rar的內(nèi)核程序,這是php自帶的壓縮功能,實(shí)例代碼如下:

  1. set_time_limit(0); 
  2. class phpzip{ 
  3.  
  4.     var $file_count = 0 ; 
  5.     var $datastr_len   = 0; 
  6.     var $dirstr_len = 0; 
  7.     var $filedata = ''//該變量只被類(lèi)外部程序訪問(wèn) 
  8.     var $gzfilename
  9.     var $fp
  10.     var $dirstr=''
  11.  
  12.     /* 
  13.     返回文件的修改時(shí)間格式. 
  14.     只為本類(lèi)內(nèi)部函數(shù)調(diào)用. 
  15.     */ 
  16.     function unix2dostime($unixtime = 0) { 
  17.         $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); 
  18.  
  19.         if ($timearray['year'] < 1980) { 
  20.         $timearray['year']    = 1980; 
  21.         $timearray['mon']     = 1; 
  22.         $timearray['mday']    = 1; 
  23.         $timearray['hours']   = 0; 
  24.         $timearray['minutes'] = 0; 
  25.         $timearray['seconds'] = 0; 
  26.         } 
  27.  
  28.         return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | 
  29.                ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); 
  30.     } 
  31.     /* 
  32.     初始化文件,建立文件目錄, 
  33.     并返回文件的寫(xiě)入權(quán)限. 
  34.     */ 
  35.     function startfile($path = 'faisun.zip'){ 
  36.        $this->gzfilename=$path
  37.        $mypathdir=array(); 
  38.        do
  39.         $mypathdir[] = $path = dirname($path); 
  40.        }while($path != '.'); 
  41.        @end($mypathdir); 
  42.        do
  43.         $path = @current($mypathdir); 
  44.         @mkdir($path); 
  45.        }while(@prev($mypathdir)); 
  46.  
  47.        if($this->fp=@fopen($this->gzfilename,"w")){ 
  48.         return true; 
  49.        } 
  50.        return false; 
  51.     } 
  52.     /* 
  53.     添加一個(gè)文件到 zip 壓縮包中. 
  54.     */ 
  55.     
  56. function addfile($data$name){ 
  57.         $name     = str_replace('/', '/', $name); 
  58.  
  59.     if(strrchr($name,'/')=='/'return $this->adddir($name); 
  60.  
  61.         $dtime    = dechex($this->unix2dostime()); 
  62.         $hexdtime = 'x' . $dtime[6] . $dtime[7] 
  63.                   . 'x' . $dtime[4] . $dtime[5] 
  64.                   . 'x' . $dtime[2] . $dtime[3] 
  65.                   . 'x' . $dtime[0] . $dtime[1]; 
  66.         eval('$hexdtime = "' . $hexdtime . '";'); 
  67.  
  68.         $unc_len = strlen($data); 
  69.         $crc     = crc32($data); 
  70.         $zdata   = gzcompress($data); 
  71.         $c_len   = strlen($zdata); 
  72.         $zdata   = substr(substr($zdata, 0, strlen($zdata) - 4), 2); 
  73.  
  74.     //新添文件內(nèi)容格式化: 
  75.         $datastr = "PK"
  76.         $datastr .= "";            // ver needed to extract 
  77.         $datastr .= "";            // gen purpose bit flag 
  78.         $datastr .= "";            // compression method 
  79.         $datastr .= $hexdtime;             // last mod time and date 
  80.         $datastr .= pack('v'$crc);             // crc32 
  81.         $datastr .= pack('v'$c_len);           // compressed filesize 
  82.         $datastr .= pack('v'$unc_len);         // uncompressed filesize 
  83.         $datastr .= pack('v'strlen($name));    // length of filename 
  84.         $datastr .= pack('v', 0);                // extra field length 
  85.         $datastr .= $name
  86.         $datastr .= $zdata
  87.         $datastr .= pack('v'$crc);                 // crc32 
  88.         $datastr .= pack('v'$c_len);               // compressed filesize 
  89.         $datastr .= pack('v'$unc_len);             // uncompressed filesize 
  90.  
  91.  
  92.     fwrite($this->fp,$datastr); //寫(xiě)入新的文件內(nèi)容 
  93.     $my_datastr_len = strlen($datastr); 
  94.     unset($datastr); 
  95.  
  96.     //新添文件目錄信息 
  97.         $dirstr = "PK"
  98.         $dirstr .= "";                // version made by 
  99.         $dirstr .= "";                // version needed to extract 
  100.         $dirstr .= "";                // gen purpose bit flag 
  101.         $dirstr .= "";                // compression method 
  102.         $dirstr .= $hexdtime;                 // last mod time & date 
  103.         $dirstr .= pack('v'$crc);           // crc32 
  104.         $dirstr .= pack('v'$c_len);         // compressed filesize 
  105.         $dirstr .= pack('v'$unc_len);       // uncompressed filesize 
  106.         $dirstr .= pack('v'strlen($name) ); // length of filename 
  107.         $dirstr .= pack('v', 0 );             // extra field length 
  108.         $dirstr .= pack('v', 0 );             // file comment length 
  109.         $dirstr .= pack('v', 0 );             // disk number start 
  110.         $dirstr .= pack('v', 0 );             // internal file attributes 
  111.         $dirstr .= pack('v', 32 );            // external file attributes - 'archive' bit set 
  112.         $dirstr .= pack('v',$this->datastr_len ); // relative offset of local header 
  113.         $dirstr .= $name
  114.  
  115.     $this->dirstr .= $dirstr//目錄信息 
  116.  
  117.     $this -> file_count ++; 
  118.     $this -> dirstr_len += strlen($dirstr); 
  119.     $this -> datastr_len += $my_datastr_len
  120.     } 
  121.  
  122.     function adddir($name){ 
  123.        $name = str_replace("/", "/", $name); 
  124.        $datastr = "PK "
  125.  
  126.        $datastr .= pack("v",0).pack("v",0).pack("v",0).pack("v"strlen($name) ); 
  127.        $datastr .= pack("v", 0 ).$name.pack("v", 0).pack("v", 0).pack("v", 0); 
  128.  
  129.        fwrite($this->fp,$datastr); //寫(xiě)入新的文件內(nèi)容 
  130.        $my_datastr_len = strlen($datastr); 
  131.        unset($datastr); 
  132.  
  133.        $dirstr = "PK "
  134.        $dirstr .= pack("v",0).pack("v",0).pack("v",0).pack("v"strlen($name) ); 
  135.        $dirstr .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 ); 
  136.        $dirstr .= pack("v", 16 ).pack("v",$this->datastr_len).$name
  137.  
  138.        $this->dirstr .= $dirstr//目錄信息 
  139.  
  140.        $this -> file_count ++; 
  141.        $this -> dirstr_len += strlen($dirstr); 
  142.        $this -> datastr_len += $my_datastr_len
  143.     }//開(kāi)源代碼Vevb.com 
  144.     function createfile(){ 
  145.        //壓縮包結(jié)束信息,包括文件總數(shù),目錄信息讀取指針位置等信息 
  146.        $endstr = "PK" . 
  147.           pack('v'$this -> file_count) . 
  148.           pack('v'$this -> file_count) . 
  149.           pack('v'$this -> dirstr_len) . 
  150.           pack('v'$this -> datastr_len) . 
  151.           ""
  152.  
  153.        fwrite($this->fp,$this->dirstr.$endstr); 
  154.        fclose($this->fp); 
  155.     } 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 顺平县| 永泰县| 大田县| 谷城县| 翼城县| 大同县| 乌什县| 西林县| 繁峙县| 内江市| 西藏| 临安市| 长丰县| 砚山县| 馆陶县| 呼伦贝尔市| 亳州市| 石家庄市| 若羌县| 济宁市| 文化| 丰镇市| 隆子县| 罗平县| 兴山县| 东乌珠穆沁旗| 建湖县| 青铜峡市| 景谷| 望江县| 宝山区| 喀什市| 汉阴县| 莱阳市| 醴陵市| 高安市| 铜陵市| 台前县| 双鸭山市| 博野县| 五峰|