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 相关文章推荐
利用static实现表格的颜色隔行显示的代码
Sep 02 PHP
php下把数组保存为文件格式的实例应用
Feb 08 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
Nov 14 PHP
php使用glob函数快速查询指定目录文件的方法
Nov 15 PHP
php有道翻译api调用方法实例
Dec 22 PHP
PHP积分兑换接口实例
Feb 09 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
May 29 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
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
js 内存释放问题
2010/04/25 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
Bootstrap源码解读排版(1)
2016/12/23 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
python 瀑布线指标编写实例
2020/06/03 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
CAD制图人员的自荐信
2014/02/07 职场文书
党旗在我心中演讲稿
2014/09/15 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
Python测试框架pytest高阶用法全面详解
2022/06/01 Python