PHP 实现文件压缩解压操作的方法


Posted in PHP onJune 14, 2019

在php中,有时我们需要使用到压缩文件操作,压缩文件可以节省磁盘空间;且压缩文件更小,便于网络传输,效率高,下面我们就来了解php的压缩解压相关操作

在PHP中有一个ZipArchive类,专门用于文件的压缩解压相关操作

在ZipArchive类中主要使用到了如下方法:

1:open(打开一个压缩包文件)

$zip = new \ZipArchive;
$zip->open('test_new.zip', \ZipArchive::CREATE)

第一个参数:要打开的压缩包文件

第二个参数:

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

ZIPARCHIVE::CREATE 如果指定的zip文件不存在,则新建一个

ZIPARCHIVE::EXCL 如果指定的zip文件存在,则会报错

ZIPARCHIVE::CHECKCONS 对指定的zip执行其他一致性测试

2:addFile(将指定文件添加到压缩包中)

//将test.txt文件添加到压缩包中
$zip->addFile('test.txt'); //第二个参数可对文件进行重命名

3:addEmptyDir (将指定空目录添加到压缩包中)

//将一个空的目录添加到zip中
 $zip->addEmptyDir ('newdir');

4:addFromString(将指定内容的文件添加到压缩包)

// 将有指定内容的new.txt文件添加到zip文件中
$zip->addFromString('new.txt', '要添加到new.txt文件中的文本');

5:extractTO(将压缩包解压到指定目录)

$zip->extractTo('test');

6:getNameIndex(根据索引返回文件名称)

$zip->getNameIndex(0);//返回压缩包中索引为0的文件名称

7:getStream(根据压缩内的文件名称,获取该文件的文本流)

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

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

/把压缩文件内第一个文件修改成newname.txt 
$zip->renameIndex(0,'newname.txt');

9:renameName(根据压缩文件内的文件名,修改压缩文件内的文件名)

//把压缩文件内的word.txt修改成newword.txt 
$zip->renameName('word.txt','newword.txt');

10:deleteIndex (根据压缩文件内的索引删除压缩文件内的文件)

/把压缩文件内第一个文件删除 
$zip->deleteIndex (0);

11:deleteName(根据压缩文件内的文件名删除文件)

//把压缩文件内的word.txt删除
$zip->deleteName('word.txt');

上面就是ZipArchive的一些常用方法,下面来一些简单示例

一:创建一个压缩包

$zip = new \ZipArchive;
if ($zip->open('test_new.zip', \ZipArchive::CREATE) === true)
{
  // 将指定文件添加到zip中
  $zip->addFile('test.txt');
  
  // test.txt文件添加到zip并将其重命名为newfile.txt
  $zip->addFile('test.txt', 'newfile.txt');
  
  // 将test.txt文件添加到zip文件中的test文件夹内
  $zip->addFile('test.txt', 'test/newfile.txt');
  
  //将一个空的目录添加到zip中
  $zip->addEmptyDir ('test');
  
  // 将有指定内容的new.txt文件添加到zip文件中
  $zip->addFromString('new.txt', '要添加到new.txt文件中的文本');
  
  // 将有指定内容的new.txt添加到zip文件中的test文件夹
  $zip->addFromString('test/new.txt', '要添加到new.txt文件中的文本');
  
  //将images目录下所有文件添加到zip中
   if ($handle = opendir('images')){
     // 添加目录中的所有文件
     while (false !== ($entry = readdir($handle))){
        if ($entry != "." && $entry != ".." && !is_dir('images/' . $entry)){
            $zip->addFile('images/' . $entry);
        }
     }
     closedir($handle);
   }
  
  // 关闭zip文件
  $zip->close();
}

二:获取压缩包的文件信息并解压指定压缩包

$zip = new \ZipArchive;
if ($zip->open('test_new.zip') === true) {
  //获取索引为0的文件名称
  var_dump($zip->getNameIndex(0));
  
  //将压缩包文件解压到test目录下
  $zip->extractTo('test');
  
  //获取压缩包指定文件的文本流
  $stream = $zip->getStream('test.txt');
  
  // 关闭zip文件
  $zip->close();
  $str = stream_get_contents($stream); //这里注意获取到的文本编码
  var_dump($str);
}

三:修改压缩包内指定文件的文件名称及删除压缩包内指定文件

$zip = new \ZipArchive;
if ($zip->open('test_new.zip') === true) {
  //把压缩文件内索引为0的文件修改成newname.txt
  $zip->renameIndex(0,'newname.txt');
  //把压缩文件内的new.txt修改成newword.txt
  $zip->renameName('new.txt','newword.txt');
  //删除压缩文件内索引为0的文件
  $zip->deleteIndex(0);
  //删除压缩文件的test.png
  $zip->deleteName('test.png');
  // 关闭zip文件
  $zip->close();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
使用sockets:从新闻组中获取文章(二)
Oct 09 PHP
让你的网站首页自动选择语言转跳
Dec 06 PHP
jq的get传参数在utf-8中乱码问题的解决php版
Jul 23 PHP
rephactor 优秀的PHP的重构工具
Jun 09 PHP
PHP读取PDF内容配合Xpdf的使用
Nov 24 PHP
destoon找回管理员密码的方法
Jun 21 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
linux下php上传文件注意事项
Jun 11 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
Sep 30 PHP
PHP批量获取网页中所有固定种子链接的方法
Nov 18 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
Nov 25 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 PHP
php反射学习之依赖注入示例
Jun 14 #PHP
php反射学习之不用new方法实例化类操作示例
Jun 14 #PHP
PHP反射学习入门示例
Jun 14 #PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
Jun 14 #PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
Jun 14 #PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 #PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 #PHP
You might like
PHP简介
2006/10/09 PHP
PHP伪静态写法附代码
2008/06/20 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
jQuery插件ajaxfileupload.js实现上传文件
2020/10/23 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
python多重继承新算法C3介绍
2014/09/28 Python
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
Python argv用法详解
2016/01/08 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
Python Flask-web表单使用详解
2017/11/18 Python
pandas 选择某几列的方法
2018/07/03 Python
一文带你了解Python中的字符串是什么
2018/11/20 Python
python中def是做什么的
2020/06/10 Python
介绍下Java的输入输出流
2014/01/22 面试题
类和结构的区别
2012/08/15 面试题
思想汇报格式
2014/01/05 职场文书
管理信息系学生的自我评价
2014/01/11 职场文书
股东合作协议书范本
2014/04/14 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
职务任命书范本
2014/06/05 职场文书
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
学校重阳节活动总结
2015/03/24 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android