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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。