设为首页 收藏本站
查看: 555|回复: 0

[经验分享] 强大的PHP压缩与解压缩zip类

[复制链接]

尚未签到

发表于 2015-8-28 13:54:17 | 显示全部楼层 |阅读模式
  PclZip介绍
PclZip library能够压缩与解压缩Zip格式的压缩档(WinZip、PKZIP);且能对此类类档案进行处理,包括产生压缩档、列出压缩档的内容以及解压 缩档案等等。由于能够在伺服器端进行压缩与解压缩的动作,所以相当方便使用。
PclZip定义一个PclZip类别,其类别物件可视为一个ZIP档案,亦提供method来进行处理。
  
  如何使用PclZip
  
1.基础
所有的功能都由pclzip.lib.php这个档案提供,PclZip library可于其首页(www.phpconcept.net/pclzip/index.en.php)下载。所有的PKZIP档案其实就是一个 PclZip的类别物件。当产生一个PclZip档案(ie, PclZip类别物件),就会先产生一个压缩档,且档名已经指定,但此压缩档的内容尚未存在:
  



Php代码 http://justcoding.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf DSC0000.png

  • <?PHP  
  •          require_once('pclzip.lib.php');  
  •          $archive = new PclZip("archive.zip");  
  • ?>  
  
  此物件提供了一些public method可用来处理此档案。
  
  
  2.参数
每一个method有其各自可使用的参数,包括有必须与非必须的参数:
  
  



Php代码 http://justcoding.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf

  • <?PHP  
  •          require_once('pclzip.lib.php');  
  •          $archive = new PclZip('archive.zip');  
  •    
  •          $v_list = $archive->add('dev/file.txt',  
  •                                     PCLZIP_OPT_REMOVE_PATH, 'dev');  
  • ?>  
  
  上例中的’dev/file.txt’就是必须参数;’PCLZIP_OPT_REMOVE_PATH’则为非必须参数。当然有些method也可以只包 含非必须的参数:
  



Php代码 http://justcoding.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf

  • <?PHP  
  •          $list = $archive->extract(PCLZIP_OPT_PATH, "folder",  
  •                           PCLZIP_OPT_REMOVE_PATH, "data",  
  •                                 PCLZIP_CB_PRE_EXTRACT, "callback_pre_extract",);  
  • ?>  
  
  上例中原本压缩档内档案存放的路径为/data,不过你可以指定解压缩至/folder中。此外,在解压缩之前,会呼叫callback function(’callback_pre_extract()’),此function可让使用者在解压缩的过程中变更档案存放路径与档名,或是选 择某些档案不解压缩。
所有可用的非必要参数可参考网址(www.phpconcept.net/pclzip/man/en/index.php)。
  
  3.回传值
每个method所回传的值可能会不同,将会在每个method中说明。不过大部分的method回传0、error或是阵列。
  
  4.错误处理
从版本1.3之后,错误处理已经整合至PclZip类别中,当一个method回传错误码,可以得知一些额外的讯息以方便错误处理:
* errorName():回传错误名称
* errorCode():回传错误码
* errorInfo():回传错误的描述
  接下来会举几个例子来说明如何使用PclZip。
  
  
  
  
  PclZip实例1、产生ZIP压缩档
PclZip($zipname):为PclZip constructor,$zipname为PKZIP压缩档的档名。
主要是产生一个PclZip物件,即一个PKZIP压缩档;但此时,只有压缩档产生出来,并做一些检查(例如是否有开启zlib extension…等),除此之外,并没有做其他动作。
  create($filelist, [optional arguments list]):将参数$filelist指定的档案或目录(包含当中所有档案与子目录)加入上述所产生的压缩档中。
而非必要的参数则能够修改压缩档内的档案存放路径。
此method可用的参数可以参考网志(www.phpconcept.net/pclzip/man/en/index.php)。
  下面的示例说明如何产生PKZIP压缩档(档名为archive.zip),并将file.txt、data/text.txt以及目录 folder(包含当中的档案与子目录)加入刚刚产生的archive.zip中:
  
  
用法一:
  



Php代码 http://justcoding.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf

  • <?   
  • include_once('pclzip.lib.php');  
  • $archive = new PclZip('archive.zip');  
  • $v_list = $archive->create('file.txt,data/text.txt,folder');  
  • if ($v_list == 0) {  
  • die("Error : ".$archive->errorInfo(true));  
  • }  
  • ?>  
  
  用法二:
  
  下面的示例说明基本上与上例一样产生archive.zip,但在将file.txt与text.txt压缩于其中时,将路径由data/改为 install/ ;因此,在archive.zip中这两个档案的路径会是install/file.txt与install/text.txt
  



Php代码 http://justcoding.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf

  • <?   
  • include_once('pclzip.lib.php');  
  • $archive = new PclZip('archive.zip');  
  • $v_list = $archive->create('data/file.txt,data/text.txt',  
  • PCLZIP_OPT_REMOVE_PATH, 'data',  
  • PCLZIP_OPT_ADD_PATH, 'install');  
  • if ($v_list == 0) {  
  • die("Error : ".$archive->errorInfo(true));  
  • }  
  • ?>  
  
  PclZip实例2、列出压缩档内容
  listContent( ) :列出压缩档中的内容,包括档案的属性与目录:
  



Php代码 http://justcoding.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf

  • <?PHP  
  •         include_once('pclzip.lib.php');  
  •         $zip = new PclZip("test.zip");  
  •    
  •         if (($list = $zip->listContent()) == 0) {  
  •         die("Error : ".$zip->errorInfo(true));  
  •         }  
  •    
  •         for ($i=0; $i<sizeof ($list); $i++) {  
  •             for(reset($list[$i]); $key = key($list[$i]); next($list[$i])) {  
  •                 echo "File $i / [$key] = ".$list[$i][$key]."<br>";  
  •             }  
  •             echo "<br />";  
  •         }  
  • ?>  
  
  上例将会回传结果:
File 0 / [filename] = data/file1.txt
File 0 / [stored_filename] = data/file1.txt
File 0 / [size] = 53
File 0 / [compressed_size] = 36
File 0 / [mtime] = 1010440428
File 0 / [comment] =
File 0 / [folder] = 0
File 0 / [index] = 0
File 0 / [status] = ok
  File 1 / [filename] = data/file2.txt
File 1 / [stored_filename] = data/file2.txt
File 1 / [size] = 54
File 1 / [compressed_size] = 53
File 1 / [mtime] = 1011197724
File 1 / [comment] =
File 1 / [folder] = 0
File 1 / [index] = 1
File 1 / [status] = ok
  
  PclZip实例3、解压缩档案
extract([options list]) :解压缩PKZIP中的档案或目录。
[options list]可用的参数可参考网址(www.phpconcept.net/pclzip/man/en/index.php)。这些参数能让使用者在解压 缩的时候有更多的选项,譬如指定变更解压缩档案的路径、指定只解压缩某些档案或不解压缩某些档案或者是将档案解压缩成字串输出(可用于readme档)。
  
  下例是一个简单的解压缩档案示例,将压缩档archive.zip内的档案解压缩至目前的目录:
  



Php代码 http://justcoding.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf

  • <?PHP  
  •         require_once('pclzip.lib.php');  
  •         $archive = new PclZip('archive.zip');  
  •    
  •    
  •         if ($archive->extract() == 0) {  
  •             die("Error : ".$archive->errorInfo(true));  
  •         }  
  • ?>  
  
  下例是进阶的解压缩档案使用,archive.zip中所有档案都解压缩于data/中,而特别指明在install/release中的所有档案也直接 丢于data/中,而非data/install/ release:
  



Php代码 http://justcoding.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf

  • <?PHP  
  •         include('pclzip.lib.php');  
  •         $archive = new PclZip('archive.zip');  
  •         if ($archive->extract(PCLZIP_OPT_PATH, 'data',  
  •                   PCLZIP_OPT_REMOVE_PATH, 'install/release') == 0) {  
  •                                 die("Error : ".$archive->errorInfo(true));  
  •         }  
  • ?>  
  
  
  
  看见create方法的参数没有,再看看方法原型你就知道如何做了。至少我还没有这样用过。
  相关文档:
PclZip官方地址 :http://www.phpconcept.net/pclzip/index.php
PclZip手册地 址 :http://www.phpconcept.net/pclzip/man/en/index.php
PEAR类创建 ZIP档案文件 :http://www.ccvita.com/10.html
PclZip简介与 使用 :http://www.ccvita.com/59.html
PclZip:强大 的PHP压缩与解压缩zip类 :http://www.ccvita.com/330.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-105604-1-1.html 上篇帖子: php 操作 MySQL 中的Blob类型 下篇帖子: php_screw 1.5:php加密: 安装与使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表