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(视频)Http下载
Dec 12 PHP
PHP执行zip与rar解压缩方法实现代码
Dec 05 PHP
php模板函数 正则实现代码
Oct 15 PHP
浅析php过滤html字符串,防止SQL注入的方法
Jul 02 PHP
php中jpgraph类库的使用介绍
Aug 08 PHP
php上传文件中文文件名乱码的解决方法
Nov 01 PHP
laravel 4安装及入门图文教程
Oct 29 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
Nov 18 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
Mar 03 PHP
怎样搭建PHP开发环境
Jul 28 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
Yii2 如何在modules中添加验证码的方法
Jun 19 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
Smarty模板快速入门
2007/01/04 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
jquery随机展示头像代码
2011/12/21 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
jQuery选择器总结之常用元素查找方法
2016/08/04 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
javascript History对象原理解析
2020/02/17 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
给Python初学者的一些编程技巧
2015/04/03 Python
python flask中静态文件的管理方法
2018/03/20 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
个人评价范文分享
2014/01/11 职场文书
小学国庆节活动总结
2015/03/23 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS