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 相关文章推荐
搜索引擎技术核心揭密
Oct 09 PHP
PHP 反射机制实现动态代理的代码
Oct 22 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
php文件缓存类汇总
Nov 21 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
PHP获取QQ达人QQ信息的方法
Mar 05 PHP
PHP自毁程序(慎用)
Jul 09 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
PHP文件上传处理案例分析
Oct 15 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 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
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
基于canvas粒子系统的构建详解
2017/08/31 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
Python去除列表中重复元素的方法
2015/03/20 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
Python 读写文件的操作代码
2018/09/20 Python
将python运行结果保存至本地文件中的示例讲解
2019/07/11 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
python实现代码审查自动回复消息
2021/02/01 Python
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
党校培训思想汇报
2014/01/03 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
学习党史心得体会2016
2016/01/23 职场文书
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android