PHP自带ZIP压缩、解压缩类ZipArchiv使用指南


Posted in PHP onMarch 03, 2015

要使用该PHP扩展类,需要(PHP 5 >= 5.2.0, PECL zip >= 1.1.0),部分方法需要 PHP 5.2.+,且php.ini配置支持zip
对于win系统,直接去掉php_zip.dll 扩展的注释,然后重启http服务(IIS或Apache)即可
Linux还没有试验,理论上差别不会很大

 功能:
1、解压缩zip文件
2、将文件压缩成zip文件
3、追加文件到zip文件
4、将文件夹打包成zip文件(需要循环添加文件与创建空文件夹)
5、删除压缩文件中的条目

--------------------- ZipArchive对象常用方法介绍 ---------------------

测试约定:
 测试文件为text.zip,该压缩文件包含了三个被压缩的文件(hello.txt、word.txt、ooxx.jpg),如下所示

text.zip 

     hello.txt 

     word.txt 

     ooxx.jpg

打开zip文件,以便进一步操作
ZipArchive::open
 (PHP 5 >= 5.2.0, PECL zip >= 1.1.0)
 mixed ZipArchive::open ( string $filename [, int $flags ] )

第2个参数讲解

ZIPARCHIVE::OVERWRITE    总是创建一个新的文件,如果指定的zip文件存在,则会覆盖掉
ZIPARCHIVE::CREATE        如果指定的zip文件不存在,则新建一个
ZIPARCHIVE::EXCL        如果指定的zip文件存在,则会报错   
ZIPARCHIVE::CHECKCONS

返回值: 

 如果返回值等于下面的属性,表示对应的错误 或者 返回TRUE
 $res == ZipArchive::ER_EXISTS    File already exists.(文件已经存在)
$res == ZipArchive::ER_INCONS    Zip archive inconsistent.(压缩文件不一致)
$res == ZipArchive::ER_INVAL    Invalid argument.(无效的参数)
$res == ZipArchive::ER_MEMORY    Malloc failure.(内存错误?这个不确定)
$res == ZipArchive::ER_NOENT    No such file.(没有这样的文件)
$res == ZipArchive::ER_NOZIP    Not a zip archive.(没有一个压缩文件)
$res == ZipArchive::ER_OPEN        Can't open file.(不能打开文件)
$res == ZipArchive::ER_READ        Read error.(读取错误)
$res == ZipArchive::ER_SEEK        Seek error.(查找错误)

<?php 

 $zip = new ZipArchive; 

 $res = $zip->open('test.zip'); 

 if ($res === TRUE) { 

     echo 'ok'; 

     //解压缩到test文件夹 

    $zip->extractTo('test'); 

     $zip->close(); 

 } else { 

     echo 'failed, code:' . $res; 

 } 

 ?>

根据压缩文件内的列表索引,返回被压缩文件的名称

ZipArchive::getNameIndex
 string ZipArchive::getNameIndex ( int $index [, int $flags ] )

 <?php 

 $zip = new ZipArchive(); 

 $res = $zip->open('test.zip'); 

 if ($res === TRUE) { 

     var_dump($zip->getNameIndex(0)); // hello.txt 

     var_dump($zip->getNameIndex(1)); // word.txt 

     var_dump($zip->getNameIndex(2)); // ooxx.jpg 

 } else { 

     echo 'failed, code:' . $res; 

 } 

 $zip->close(); 

 ?>

根据压缩内的文件名称,获取该文件的文本流

ZipArchive::getStream
 resource ZipArchive::getStream ( string $name )

 <?php 

 $zip = new ZipArchive(); 

 $res = $zip->open('test.zip'); 

 if ($res === TRUE) { 

     $stream = $zip->getStream('hello.txt'); 

 } else { 

     echo 'failed, code:' . $res; 

 } 

 $zip->close(); 

 $str = stream_get_contents($stream); //这里注意获取到的文本编码 

var_dump($str); 

 ?>

根据压缩文件内的索引(从0开始)修改压缩文件内的文件名

ZipArchive::renameIndex
 bool ZipArchive::renameIndex ( int $index , string $newname )
 (PHP 5 >= 5.2.0, PECL zip >= 1.5.0)

成功时返回 TRUE, 或者在失败时返回 FALSE。

<?php 

 $zip = new ZipArchive; 

 $res = $zip->open('test.zip'); 

 if ($res === TRUE) { 

     //把压缩文件内第一个文件修改成newname.txt 

     $zip->renameIndex(0,'newname.txt'); 

     $zip->close(); 

 } else { 

     echo 'failed, code:' . $res; 

 } 

 ?>

根据压缩文件内的文件名,修改压缩文件内的文件名

ZipArchive::renameName
 (PHP 5 >= 5.2.0, PECL zip >= 1.5.0)

 <?php 

 $zip = new ZipArchive; 

 $res = $zip->open('test.zip'); 

 if ($res === TRUE) { 

     //把压缩文件内的word.txt修改成newword.txt 

     $zip->renameName('word.txt','newword.txt'); 

     $zip->close(); 

 } else { 

     echo 'failed, code:' . $res; 

 } 

 ?>

获取压缩文件的注释(zip的文件注释)

ZipArchive::getArchiveComment
 (PHP 5 >= 5.2.0, PECL zip >= 1.1.0)
 string ZipArchive::getArchiveComment ([ int $flags ] )
参数:ZipArchive::FL_UNCHANGED
如果参数设置为 ZipArchive::FL_UNCHANGED, 返回原始的还没有改变的注释
 例如,在处理该压缩文件时,使用setArchiveComment()方法改变或设置注释时
 如果加上ZipArchive::FL_UNCHANGED这个参数,则表示获取改变之前的注释内容,否则获取已经改变的注释内容
 类似的还有:
ZipArchive::getCommentIndex 根据压缩文件内的文件索引获取【文件注释】
ZipArchive::getCommentName    根据压缩文件内的文件名称获取【文件注释】
 注意:这里的是文件注释,不是压缩文件(zip)的注释

 设置或修改压缩文件的注释(zip的文件注释)
ZipArchive::setArchiveComment
 (PHP 5 >= 5.2.0, PECL zip >= 1.4.0)
 bool ZipArchive::setArchiveComment ( string $comment )

 <?php 

 $zip = new ZipArchive; 

 $res = $zip->open('test.zip', ZipArchive::CREATE); 

 if ($res === TRUE) { 

     //$zip->addFromString('test.txt', 'file content goes here'); 

     $zip->setArchiveComment('new archive comment'); 

     $zip->close(); 

     echo 'ok'; 

 } else { 

     echo 'failed'; 

 } 

 ?>

根据压缩文件内的索引删除压缩文件内的文件(也就是删除档案内的条目)

ZipArchive::deleteIndex
 (PHP 5 >= 5.2.0, PECL zip >= 1.5.0)

一、如何解压缩一个zip文件 extractTo()

 $zip = new ZipArchive();

一、如何创建压缩文件? addFromString() addFile()

即是是把一个或多个文件打包成一个zip文件

1、只需要new一个ZipArchive对象
2、然后使用该对象的open方法创建一个zip文件
3、接着使用addFile方法,将要打包的文件写入刚刚创建的zip文件中
4、最后记得关闭该对象

<?php 

 //建立一个新的ZipArchive的对象 

$zip = new ZipArchive; 

 $res = $zip->open('test.zip'); 

 //如果打开成功 

if ($res === TRUE) { 

 //如果打开失败 

} else { 

     //输出出错的代码 

    echo 'failed, code:' . $res; 

 } 

 $zip->close();

以上所述就是本文的全部内容了,希望能对大家有所帮助。

PHP 相关文章推荐
默默简单的写了一个模板引擎
Jan 02 PHP
PHP file_exists问题杂谈
May 07 PHP
php中如何使对象可以像数组一样进行foreach循环
Aug 09 PHP
php设置静态内容缓存时间的方法
Dec 01 PHP
Linux下编译redis和phpredis的方法
Apr 07 PHP
Smarty分页实现方法完整实例
May 11 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
Nov 16 PHP
thinkPHP5.0框架API优化后的友好性分析
Mar 17 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
yii2安装详细流程
May 23 PHP
PHP7 安装event扩展的实现方法
Oct 08 PHP
详解PHP设计模式之依赖注入模式
May 25 PHP
ecshop后台编辑器替换成ueditor编辑器
Mar 03 #PHP
php使用curl出现Expect:100-continue解决方法
Mar 03 #PHP
php实现四舍五入的方法小结
Mar 03 #PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
Mar 03 #PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 #PHP
laravel安装zend opcache加速器教程
Mar 02 #PHP
分享一个Laravel好用的Cache宏
Mar 02 #PHP
You might like
php 判断数组是几维数组
2013/03/20 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
jquery radio 操作代码
2011/03/16 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
jQuery焦点图轮播特效代码分享(3款)
2015/09/05 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
学院书画协会部门岗位职责
2013/12/01 职场文书
管理心得体会
2013/12/28 职场文书
寒假思想汇报
2014/01/10 职场文书
品质主管岗位职责
2014/03/16 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
安全例会汇报材料
2014/08/23 职场文书
股指期货心得体会
2014/09/13 职场文书
2015年电工工作总结
2015/04/10 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python
mysql事务对效率的影响分析总结
2021/10/24 MySQL
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
python中pymysql包操作数据库方法
2022/04/19 Python