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 相关文章推荐
php 批量替换html标签的实例代码
Nov 26 PHP
php保存二进制原始数据为图片的程序代码
Oct 14 PHP
php计算给定时间之前的函数用法实例
Apr 03 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
简单谈谈php中的unicode和utf8编码
Jun 10 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
PHP数组操作简单案例分析
Oct 15 PHP
PHP 表单提交及处理表单数据详解及实例
Dec 27 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 PHP
Laravel手动返回错误码示例
Oct 22 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
PHP字符串 ==比较运算符的副作用
2009/10/21 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
javascript 中that的含义示例介绍
2014/05/14 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
python中set()函数简介及实例解析
2018/01/09 Python
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
8种常用的Python工具
2020/08/05 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
函授生自我鉴定
2014/03/25 职场文书
出纳工作检讨书
2014/10/18 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis