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 && 逻辑与运算符使用说明
Mar 04 PHP
php cURL和Rolling cURL并发方式比较
Oct 30 PHP
PHP获取服务器端信息的方法
Nov 28 PHP
PHP中字符安全过滤函数使用小结
Feb 25 PHP
php结合ACCESS的跨库查询功能
Jun 12 PHP
php实现的任意进制互转类分享
Jul 07 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 PHP
PHP实现根据图片色界在不同位置加水印的方法
Aug 08 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
Jul 24 PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 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设计模式 php实现单例模式(singleton)
2015/12/07 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
项目实践之javascript技巧
2007/12/06 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
Three.js基础学习教程
2017/11/16 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
微信小程序实现星星评分效果
2020/11/01 Javascript
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
Mac 上切换Python多版本
2017/06/17 Python
python字符串循环左移
2019/03/08 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
python绘制多个子图的实例
2019/07/07 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
python三引号如何输入
2020/07/06 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
会计实习生自我鉴定
2013/12/12 职场文书
网络管理专业求职信
2014/03/15 职场文书
总经理任命书范本
2014/06/05 职场文书
宣传普通话标语
2014/06/27 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
nginx 配置缓存
2022/05/11 Servers