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 如何向 MySQL 发送数据
Oct 09 PHP
一家之言的经验之谈php+mysql扎实个人基本功
Mar 27 PHP
php 执行系统命令的方法
Jul 07 PHP
基于php伪静态的实现详细介绍
Apr 28 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
Feb 13 PHP
php使用正则过滤js脚本代码实例
May 10 PHP
PHP全局变量与超级全局变量区别分析
Apr 01 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
php使用json-schema模块实现json校验示例
Sep 28 PHP
通过代码实例解析PHP session工作原理
Dec 11 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分页示例代码
2007/03/19 PHP
php 常用类整理
2009/12/23 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
PHP asXML()函数讲解
2019/02/03 PHP
javascript web页面刷新的方法收集
2009/07/02 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
python调用staf自动化框架的方法
2018/12/26 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
python tkinter控件布局项目实例
2019/11/04 Python
HTML5等待加载动画效果
2017/07/27 HTML / CSS
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
linux面试题参考答案(11)
2012/05/01 面试题
校园达人秀策划书
2014/01/12 职场文书
幼儿园毕业家长感言
2014/02/10 职场文书
《藏戏》教学反思
2014/02/11 职场文书
《月迹》教学反思
2014/02/19 职场文书
请假条标准格式规范
2014/04/10 职场文书
美术兴趣小组活动总结
2014/07/07 职场文书
学习经验交流会总结
2015/11/02 职场文书
Redis高并发缓存架构性能优化
2022/05/15 Redis