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 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
php中heredoc与nowdoc介绍
Dec 25 PHP
php+xml实现在线英文词典查询的方法
Jan 23 PHP
php给一组指定关键词添加span标签的方法
Mar 31 PHP
PHP查找与搜索数组元素方法总结
Jun 12 PHP
php 利用array_slice函数获取随机数组或前几条数据
Sep 30 PHP
PHP 将dataurl转成图片image方法总结
Oct 14 PHP
php技巧小结【推荐】
Jan 19 PHP
php 一维数组的循环遍历实现代码
Apr 10 PHP
PHP实现活动人选抽奖功能
Apr 19 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批量上传图片的具体实现方法介绍.
2014/02/26 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
javascript 日期常用的方法
2009/11/11 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
2019/04/04 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
Python中单、双下划线的区别总结
2017/12/01 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
Pandas中resample方法详解
2019/07/02 Python
python判断自身是否正在运行的方法
2019/08/08 Python
对Django中内置的User模型实例详解
2019/08/16 Python
Python random模块制作简易的四位数验证码
2020/02/01 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
CSS3实现swap交换动画
2016/01/19 HTML / CSS
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
介绍下Java中==和equals的区别
2013/09/01 面试题
技术总监管理职责范本
2014/03/06 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android