有时候需要输出服务器上某个文件夹的全部文件,比如备份网站,用下面的php函数来实现。 函数库代码PHPZip为:(请复制以下代码保存,以供调用) ? Class PHPZip{ Private $StrPath="../../@UpLoad"; Private $datasec=array(); Private $ctrl_dir=array(); Pr
有时候需要输出服务器上某个文件夹的全部文件,比如备份网站,用下面的php函数来实现。
函数库代码PHPZip为:(请复制以下代码保存,以供调用)
<? Class PHPZip{ Private $StrPath="../../@UpLoad"; Private $datasec=array(); Private $ctrl_dir=array(); Private $eof_ctrl_dir="PK "; Private $old_offset=0; //压缩后下载 Function DownLoad($curdir,$zipfilename,$out){ $zipfilename=StrToLower($zipfilename); $curdir=Str_iReplace(basename($curdir),"",$curdir); chdir($curdir.$this->StrPath); header('Content-Encoding: none'); header('Content-Type: application/zip'); header('Content-Disposition: attachment ; filename='.Str_Replace(".zip","",basename($zipfilename)).'.zip'); header('Pragma: no-cache'); header('Expires: 0'); print($out); } //压缩后保存在服务器,默认在/@Upload下 Function SaveFile($curdir,$zipfilename,$out){ $curdir=Str_iReplace(basename($curdir),"",$curdir); chdir($curdir.$this->StrPath); $fp=fopen($zipfilename,"wb"); fwrite($fp,$out,strlen($out)); fclose($fp); } //函数用途:压缩文件夹,递归逐层进行 //参数详解:$dir需要压缩的目录,$zipfilename压缩后的文件名及存放路径,$Todo处理方式1提供下载2保存文件在服务器 Function ZipDir($dir,$zipfilename,$Todo){ IF(!@Function_exists('gzcompress')){Return 0;} @set_time_limit("0"); $this->openFile($dir,$zipfilename); $out=$this -> filezip(); Switch ($Todo){ Case "1": $this -> DownLoad(__FILE__,$zipfilename,$out); Break; Case "2": $this -> SaveFile(__FILE__,$zipfilename,$out); Break; } } //函数用途:压缩文件,可以是单个也可以是数组的多个 //参数详解:$file需要压缩的文件(可为数组),$zipfilename压缩后的文件名及存放路径,$Todo处理方式1提供下载2保存文件在服务器 Function ZipFile($file,$zipfilename,$Todo){ IF(!@Function_exists('gzcompress')){Return 0;} IF(is_array($file)){ Foreach($file as $filename){ IF(is_file($filename)){ $fd= fopen ($filename, "rb"); $content= @fread($fd, filesize ($filename)); fclose ($fd); $filename= basename($filename); $this -> addFile($content, $filename); } } }Else{ IF(is_file($file)){ $fd= fopen ($file, "rb"); $content= @fread($fd, filesize($file)); fclose ($fd); $file= basename($file); $this -> addFile($content, $file); } } $out= $this -> filezip(); Switch ($Todo){ Case "1": $this -> DownLoad(__FILE__,$zipfilename,$out); Break; Case "2": $this -> SaveFile(__FILE__,$zipfilename,$out); Break; } } //递归取得下层文件夹下的文件 Function openFile($path,$zipName){ $temp_path=$path; $temp_zip_path=$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,$path.'/'.$file); }Else{ $this ->openFile($path.'/'.$file,$zipName.'/'.$file); } } } $zipName=$temp_zip_path; $path=$temp_path; closedir($handle); } } Function addFile($data,$name,$time=0){ $name=str_replace('\','/',$name); $name=str_replace('./','',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="PK"; $fr.=" "; $fr.="