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 相关文章推荐
FCKeditor的安装(PHP)
Jan 13 PHP
php将时间差转换为字符串提示
Sep 07 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
Sep 25 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
Jul 15 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 PHP
eval(cmd)与eval($cmd)的区别与联系
Jul 07 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
国内咖啡文化
2021/03/03 咖啡文化
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
vue中axios封装使用的完整教程
2021/03/03 Vue.js
Python sys.argv用法实例
2015/05/28 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
中学老师的自我评价
2013/11/07 职场文书
主题酒店策划书
2014/01/28 职场文书
小学毕业感言500字
2014/02/28 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
初中作文评语
2014/12/25 职场文书
自荐信格式模板
2015/03/27 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
建党伟业电影观后感
2015/06/01 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android