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+SQLite存储方案
Sep 04 PHP
基于Zookeeper的使用详解
May 02 PHP
destoon调用自定义模板及样式的公告栏
Jun 21 PHP
利用PHP函数计算中英文字符串长度的方法
Nov 11 PHP
完整删除ecshop中获取店铺信息的API
Dec 24 PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
PHP微信PC二维码登陆的实现思路
Jul 13 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
Jan 10 PHP
PHP实现统计代码行数小工具
Sep 19 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
详解vue中async-await的使用误区
2018/12/05 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
[29:10]Ti4 冒泡赛第二天 NEWBEE vs Titan 3
2014/07/15 DOTA
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
Python中的默认参数实例分析
2018/01/29 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
英语三分钟演讲稿
2014/08/19 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书