您好,欢迎访问一九零五行业门户网

php打包网站并在线压缩为zip_PHP

本文实例介绍了php打包网站并在线压缩为zip的方法,分享给大家供大家参考,具体内容如下
 php zip压缩程序 在线压缩zip文件程序
使用方法:选定要压缩的文件或目录(包含子目录),即可开始压缩。压缩的结果保留原来的目录结构。
验证密码:
压缩文件保存到目录:(留空为本目录,必须有写入权限)
压缩文件名称:(.zip)
<? elseif($_request[myaction]==dozip): // set_time_limit(0); class phpzip{ var $file_count = 0 ; var $datastr_len = 0; var $dirstr_len = 0; var $filedata = ''; //该变量只被类外部程序访问 var $gzfilename; var $fp; var $dirstr=''; /* 返回文件的修改时间格式. 只为本类内部函数调用. */ 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'] 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

以上就是本文的全部内容,希望对大家的学习有所帮助。
其它类似信息

推荐信息