PHP压缩文件夹的类代码
2023-06-13 09:14:14 时间
<?php
/*
$Id:PHPZip.php
*/
classPHPZip{
var$datasec=array();
var$ctrl_dir=array();
var$eof_ctrl_dir="\x50\x4b\x05\x06\x00\x00\x00\x00";
var$old_offset=0;
functionZip($dir,$zipfilename){
if(@function_exists("gzcompress")){
@set_time_limit("0");
$this->openFile($dir,$dir);
$out=$this->filezip();
$fp=fopen($zipfilename,"w");
fwrite($fp,$out,strlen($out));
fclose($fp);
}
}
functionopenFile($path,$zipName){
$temp_path=$path;
$temp_zip_path=$zipName;
$zipDir=$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,$zipName."/".$file);
}else{
$this->openFile($path."/".$file,$zipName."/".$file);
}
}
}
$zipName=$temp_zip_path;
$path=$temp_path;
closedir($handle);
}
}
functionunix2DosTime($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"]<<11)|($timearray["minutes"]<<5)|($timearray["seconds"]>>1);
}
functionaddFile($data,$name,$time=0){
$name=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="\x50\x4b\x03\x04";
$fr.="\x14\x00";
$fr.="\x00\x00";
$fr.="\x08\x00";
$fr.=$hexdtime;
$unc_len=strlen($data);
$crc=crc32($data);
$zdata=gzcompress($data);
$c_len=strlen($zdata);
$zdata=substr(substr($zdata,0,strlen($zdata)-4),2);
$fr.=pack("V",$crc);
$fr.=pack("V",$c_len);
$fr.=pack("V",$unc_len);
$fr.=pack("v",strlen($name));
$fr.=pack("v",0);
$fr.=$name;
$fr.=$zdata;
$fr.=pack("V",$crc);
$fr.=pack("V",$c_len);
$fr.=pack("V",$unc_len);
$this->datasec[]=$fr;
$new_offset=strlen(implode("",$this->datasec));
$cdrec="\x50\x4b\x01\x02";
$cdrec.="\x00\x00";
$cdrec.="\x14\x00";
$cdrec.="\x00\x00";
$cdrec.="\x08\x00";
$cdrec.=$hexdtime;
$cdrec.=pack("V",$crc);
$cdrec.=pack("V",$c_len);
$cdrec.=pack("V",$unc_len);
$cdrec.=pack("v",strlen($name));
$cdrec.=pack("v",0);
$cdrec.=pack("v",0);
$cdrec.=pack("v",0);
$cdrec.=pack("v",0);
$cdrec.=pack("V",32);
$cdrec.=pack("V",$this->old_offset);
$this->old_offset=$new_offset;
$cdrec.=$name;
$this->ctrl_dir[]=$cdrec;
}
functionfilezip(){
$data=implode("",$this->datasec);
$ctrldir=implode("",$this->ctrl_dir);
return
$data.
$ctrldir.
$this->eof_ctrl_dir.
pack("v",sizeof($this->ctrl_dir)).
pack("v",sizeof($this->ctrl_dir)).
pack("V",strlen($ctrldir)).
pack("V",strlen($data)).
"\x00\x00";
}
}
?>
相关文章
- 20210903最近两天写代码的心得——PHP
- 【php】Parse error: syntax error, unexpected ‘?’, expecting variable (T_VARIABLE)–PHP版本的问题
- PHP服务器在Linux上的应用(php服务器linux)
- 技术实现的网络系统PHP和MySQL结合:搭建网络系统的利器.(基于php和mysql)
- 从MySQL到PHP:展示表格数据(php显示mysql表)
- PHP连接MySQL数据库的实现代码分享(php连接mysql代码)
- 快速WDCP升级PHP至5.5版本以及安装PDO_MYSQL组件
- Linux环境下,如何高效、简单地编写PHP代码(linux下写php)
- 学习PHP连接MySQL:简易教程分享(php连接mysql教程)
- js中的escape及unescape函数的php实现代码
- php获取mysql数据库信息代码
- 用php将任何格式视频转为flv的代码
- Php获取金书网的书名的实现代码
- flash用php连接数据库的代码
- php入门学习知识点六PHP文件的读写操作代码
- PHP通过正则表达式下载图片到本地的实现代码
- php数组去重的函数代码
- PHP转换文件夹下所有文件编码的实现代码
- 写一段简单的PHP建立文件夹代码
- PHP中读取文件的8种方法和代码实例