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 相关文章推荐
php ignore_user_abort与register_shutdown_function 使用方法
Jun 14 PHP
discuz authcode 经典php加密解密函数解析
Jul 12 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
Jun 06 PHP
php顺序查找和二分查找示例
Mar 27 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
Oct 07 PHP
PHP异步进程助手async-helper
Feb 05 PHP
PHP7 字符串处理机制修改
Mar 09 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学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
php 发送带附件邮件示例
2014/01/23 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
使用RequireJS优化JavaScript引用代码的方法
2015/07/01 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
js实现点击图片在屏幕中间弹出放大效果
2019/09/11 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
一则python3的简单爬虫代码
2014/05/26 Python
python开发中range()函数用法实例分析
2015/11/12 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
Python测试网络连通性示例【基于ping】
2018/08/03 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
播音主持女孩的自我评价分享
2013/11/20 职场文书
超市员工管理制度
2015/08/06 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python