PHP zip压缩包操作类完整实例
本文实例讲述了PHPzip压缩包操作类。分享给大家供大家参考,具体如下:
zip=newZipArchive;
}
/**
*解压zip文件到指定文件夹
*
*@accesspublic
*@paramstring$zipfile压缩文件路径
*@paramstring$path压缩包解压到的目标路径
*@returnbooleam解压成功返回true否则返回false
*/
publicfunctionunzip($zipfile,$path){
if($this->zip->open($zipfile)===true){
$file_tmp=@fopen($zipfile,"rb");
$bin=fread($file_tmp,15);//只读15字节各个不同文件类型,头信息不一样。
fclose($file_tmp);
/*只针对zip的压缩包进行处理*/
if(true===$this->getTypeList($bin))
{
$result=$this->zip->extractTo($path);
$this->zip->close();
return$result;
}
else
{
returnfalse;
}
}
returnfalse;
}
/**
*创建压缩文件
*
*@accesspublic
*@paramstring$zipfile将要生成的压缩文件路径
*@paramstrng$folder将要被压缩的文件夹路径
*@paramarray$ignored要忽略的文件列表
*@returnbooleam压缩包生成成功返回true否则返回false
*/
publicfunctionzip($zipfile,$folder,$ignored=null){
$this->ignored_names=is_array($ignored)?$ignored:$ignored?array($ignored):array();
if($this->zip->open($zipfile,ZIPARCHIVE::CREATE)!==true){
thrownewException("cannotopen<$zipfile>\n");
}
$folder=substr($folder,-1)=='/'?substr($folder,0,strlen($folder)-1):$folder;
if(strstr($folder,'/')){
$this->root=substr($folder,0,strrpos($folder,'/')+1);
$folder=substr($folder,strrpos($folder,'/')+1);
}
$this->createZip($folder);
return$this->zip->close();
}
/**
*递归添加文件到压缩包
*
*@accessprivate
*@paramstring$folder添加到压缩包的文件夹路径
*@paramstring$parent添加到压缩包的文件夹上级路径
*@returnvoid
*/
privatefunctioncreateZip($folder,$parent=null){
$full_path=$this->root.$parent.$folder;
$zip_path=$parent.$folder;
$this->zip->addEmptyDir($zip_path);
$dir=newDirectoryIterator($full_path);
foreach($diras$file){
if(!$file->isDot()){
$filename=$file->getFilename();
if(!in_array($filename,$this->ignored_names)){
if($file->isDir()){
$this->createZip($filename,$zip_path.'/');
}else{
$this->zip->addFile($full_path.'/'.$filename,$zip_path.'/'.$filename);
}
}
}
}
}
/**
*读取压缩包文件与目录列表
*
*@accesspublic
*@paramstring$zipfile压缩包文件
*@returnarray文件与目录列表
*/
publicfunctionfileList($zipfile){
$file_dir_list=array();
$file_list=array();
if($this->zip->open($zipfile)==true){
for($i=0;$i<$this->zip->numFiles;$i++){
$numfiles=$this->zip->getNameIndex($i);
if(preg_match('/\/$/i',$numfiles))
{
$file_dir_list[]=$numfiles;
}
else
{
$file_list[]=$numfiles;
}
}
}
returnarray('files'=>$file_list,'dirs'=>$file_dir_list);
}
/**
*得到文件头与文件类型映射表
*
*@authorwengxianhu
*@date2013-08-10
*@param$binstring文件的二进制前一段字符
*@returnboolean
*/
privatefunctiongetTypeList($bin)
{
$array=array(
array("504B0304","zip")
);
foreach($arrayas$v)
{
$blen=strlen(pack("H*",$v[0]));//得到文件头标记字节数
$tbin=substr($bin,0,intval($blen));///需要比较文件头长度
if(strtolower($v[0])==strtolower(array_shift(unpack("H*",$tbin))))
{
returntrue;
}
}
returnfalse;
}
}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP操作zip文件及压缩技巧总结》、《php文件操作总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。