有时候需要输出服务器上某个文件夹的全部文件,比如备份网站,用下面的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.="