php打包网站并在线压缩为zip的方法
创始人
2024-12-10 21:00:13
0次

本文实例介绍了php打包网站并在线压缩为zip的方法,分享给大家供大家参考,具体内容如下





  
php ZIP压缩程序




 

 ">
在线压缩ZIP文件程序
 
   

使用方法:选定要压缩的文件或目录(包含子目录),即可开始压缩。压缩的结果保留原来的目录结构。    '. dirname(__FILE__) . '        退出';      else       if(isset($_GET['pwd']) )         echo '密码值:'. md5($_GET['pwd']) . '';       else         echo 'Tips:在URL后参加?pwd=密码 查看生成密码.';     ?>    

      验证密码:                            document.getElementById('password').focus();   Again');   if(md5($_REQUEST['pwd']) != $password)     die('输入的密码不正确!Again'); echo '选择要排除的目录(相对路径,以英文半角逗号分隔):'; echo '';   echo "选择要压缩的文件或目录:
";    $fdir = opendir('./');   while($file=readdir($fdir)){     if($file=='.'|| $file=='..' ) continue;     echo " ";     if(is_file($file)){       echo "文件: $file
";     }else{       echo "目录: $file
";     }   } ?>
压缩文件保存到目录: _" size="20"> (留空为本目录,必须有写入权限)
压缩文件名称: .zip" size="15"> (.zip)

"> function selrev() {   with(document.getElementById('myform')){     for(i=0;i > 1);   }     /*   初始化文件,建立文件目录,   并返回文件的写入权限.   */   function startfile($path = 'myzip.zip'){     $this->gzfilename=$path;     $mypathdir=array();     do{       $mypathdir[] = $path = dirname($path);     }while($path != '.');     @end($mypathdir);     do{       $path = @current($mypathdir);       @mkdir($path);     }while(@prev($mypathdir));       if($this->fp=@fopen($this->gzfilename,"w")){       return true;     }     return false;   }     /*   添加一个文件到 zip 压缩包中.   */   function addfile($data, $name){     $name   = str_replace('\\', '/', $name);       if(strrchr($name,'/')=='/') return $this->adddir($name);       $dtime  = dechex($this->unix2DosTime());     $hexdtime = '\x' . $dtime[6] . $dtime[7]          . '\x' . $dtime[4] . $dtime[5]          . '\x' . $dtime[2] . $dtime[3]          . '\x' . $dtime[0] . $dtime[1];     eval('$hexdtime = "' . $hexdtime . '";');       $unc_len = strlen($data);     $crc   = crc32($data);     $zdata  = gzcompress($data);     $c_len  = strlen($zdata);     $zdata  = substr(substr($zdata, 0, strlen($zdata) - 4), 2);       //新添文件内容格式化:     $datastr = "\x50\x4b\x03\x04";     $datastr .= "\x14\x00";      // ver needed to extract     $datastr .= "\x00\x00";      // gen purpose bit flag     $datastr .= "\x08\x00";      // compression method     $datastr .= $hexdtime;       // last mod time and date     $datastr .= pack('V', $crc);       // crc32     $datastr .= pack('V', $c_len);      // compressed filesize     $datastr .= pack('V', $unc_len);     // uncompressed filesize     $datastr .= pack('v', strlen($name));  // length of filename     $datastr .= pack('v', 0);        // extra field length     $datastr .= $name;     $datastr .= $zdata;     $datastr .= pack('V', $crc);         // crc32     $datastr .= pack('V', $c_len);        // compressed filesize     $datastr .= pack('V', $unc_len);       // uncompressed filesize         fwrite($this->fp,$datastr);  //写入新的文件内容     $my_datastr_len = strlen($datastr);     unset($datastr);       //新添文件目录信息     $dirstr = "\x50\x4b\x01\x02";     $dirstr .= "\x00\x00";          // version made by     $dirstr .= "\x14\x00";          // version needed to extract     $dirstr .= "\x00\x00";          // gen purpose bit flag     $dirstr .= "\x08\x00";          // compression method     $dirstr .= $hexdtime;           // last mod time & date     $dirstr .= pack('V', $crc);        // crc32     $dirstr .= pack('V', $c_len);       // compressed filesize     $dirstr .= pack('V', $unc_len);      // uncompressed filesize     $dirstr .= pack('v', strlen($name) );   // length of filename     $dirstr .= pack('v', 0 );         // extra field length     $dirstr .= pack('v', 0 );         // file comment length     $dirstr .= pack('v', 0 );         // disk number start     $dirstr .= pack('v', 0 );         // internal file attributes     $dirstr .= pack('V', 32 );        // external file attributes - 'archive' bit set     $dirstr .= pack('V',$this->datastr_len ); // relative offset of local header     $dirstr .= $name;       $this->dirstr .= $dirstr;  //目录信息       $this -> file_count ++;     $this -> dirstr_len += strlen($dirstr);     $this -> datastr_len += $my_datastr_len;   }     function adddir($name){     $name = str_replace("\\", "/", $name);     $datastr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";       $datastr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );     $datastr .= pack("v", 0 ).$name.pack("V", 0).pack("V", 0).pack("V", 0);       fwrite($this->fp,$datastr);  //写入新的文件内容     $my_datastr_len = strlen($datastr);     unset($datastr);       $dirstr = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";     $dirstr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );     $dirstr .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 );     $dirstr .= pack("V", 16 ).pack("V",$this->datastr_len).$name;       $this->dirstr .= $dirstr;  //目录信息       $this -> file_count ++;     $this -> dirstr_len += strlen($dirstr);     $this -> datastr_len += $my_datastr_len;   }       function createfile(){     //压缩包结束信息,包括文件总数,目录信息读取指针位置等信息     $endstr = "\x50\x4b\x05\x06\x00\x00\x00\x00" .           pack('v', $this -> file_count) .           pack('v', $this -> file_count) .           pack('V', $this -> dirstr_len) .           pack('V', $this -> datastr_len) .           "\x00\x00";       fwrite($this->fp,$this->dirstr.$endstr);     fclose($this->fp);   }  }       if(!trim($_REQUEST['zipname']))     $_REQUEST['zipname'] = 'backup_'.substr(md5(__FILE__),0,8). '.zip';   else     $_REQUEST['zipname'] = trim($_REQUEST['zipname']);   if(!strrchr(strtolower($_REQUEST['zipname']),'.')=='.zip')     $_REQUEST['zipname'] .= ".zip";   $_REQUEST['todir'] = str_replace('\\','/',trim($_REQUEST['todir']));   if(!strrchr(strtolower($_REQUEST['todir']),'/')=='/')     $_REQUEST['todir'] .= "/";   if($_REQUEST['todir']=="/")     $_REQUEST['todir'] = "./";     function listfiles($dir="."){     global $faisunZIP;     $sub_file_num = 0;       if(is_file($dir)){      if(realpath($faisunZIP->gzfilename)!=realpath($dir)){       $faisunZIP -> addfile(implode('',file($dir)),$dir);       return 1;      }       return 0;     }       $handle=opendir($dir);     //添加排除     $to_exlude = !empty($_POST['toexlude']) ? $_POST['toexlude'] :'';     $exlude = empty($to_exlude) ? array() : explode(',',$to_exlude);     while ($file = readdir($handle)) {       if($file=="."||$file==".." || $file == 'wp-content' )continue;       if(is_dir("$dir/$file") && !in_array("$dir/$file",$exlude) )       {        $sub_file_num += listfiles("$dir/$file");       }       else {          if(realpath($faisunZIP ->gzfilename)!=realpath("$dir/$file")){          $faisunZIP -> addfile(implode('',file("$dir/$file")),"$dir/$file");          $sub_file_num ++;         }       }     }     closedir($handle);     if(!$sub_file_num) $faisunZIP -> addfile("","$dir/");     return $sub_file_num;   }     function num_bitunit($num){    $bitunit=array(' B',' KB',' MB',' GB');    for($key=0;$key=pow(2,10*$key)-1){ //1023B 会显示为 1KB      $num_bitunit_str=(ceil($num/pow(2,10*$key)*100)/100)." $bitunit[$key]";     }    }    return $num_bitunit_str;   }     if(is_array($_REQUEST['dfile'])){     $faisunZIP = new PHPzip;     if($faisunZIP -> startfile($_REQUEST['todir'].$_REQUEST['zipname'])){       echo "正在添加压缩文件...

";       $filenum = 0;       foreach($_REQUEST['dfile'] as $file){         if(is_file($file)){           echo "文件: $file 
";         }else{           echo "目录: $file 
";         }         $filenum += listfiles($file);       }       $faisunZIP -> createfile();       echo "
压缩完成,共添加 $filenum 个文件.". $_REQUEST['todir'].$_REQUEST['zipname']." (".num_bitunit(filesize("$_REQUEST[todir]$_REQUEST[zipname]")).")";     }else{       echo $_REQUEST['todir'].$_REQUEST['zipname'].'不能写入,请检查路径或权限是否正确.
';     }   }else{     echo "没有选择的文件或目录.
";   }     endif;   ?>      

 TOP

 

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...