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之第六天
Oct 09 PHP
解析php中获取系统信息的方法
Jun 25 PHP
php分页示例分享
Apr 30 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 PHP
PHP微信红包API接口
Dec 05 PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 PHP
php中str_pad()函数用法分析
Mar 28 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
May 30 PHP
PHP函数积累总结
Mar 19 PHP
PHP递归统计系统中代码行数
Sep 19 PHP
tp5递归 无限级分类详解
Oct 18 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调用Java对象的方法
2006/10/09 PHP
在字符串中把网址改成超级链接
2006/10/09 PHP
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
javascript时间差插件分享
2016/07/18 Javascript
js实现股票实时刷新数据案例
2017/05/14 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
django_orm查询性能优化方法
2018/08/20 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
在Python中增加和插入元素的示例
2018/11/01 Python
将python运行结果保存至本地文件中的示例讲解
2019/07/11 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
python实现微信打飞机游戏
2020/03/24 Python
python实现人像动漫化的示例代码
2020/05/17 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
文科生自我鉴定
2014/02/15 职场文书
建筑安全标语
2014/06/07 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
出国签证在职证明
2014/09/20 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
初三数学教学反思
2016/02/17 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
java多态注意项小结
2021/10/16 Java/Android
MySQL查询日期时间
2022/05/15 MySQL