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 一个随机字符串生成代码
May 26 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
Aug 07 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
Aug 09 PHP
深入解析php中的foreach函数
Aug 31 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
May 09 PHP
PHP实现自动登入google play下载app report的方法
Sep 23 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 PHP
phpfpm的作用和用法
Oct 10 PHP
关于laravel模板中生成URL的几种模式总结
Oct 18 PHP
Laravel实现ORM带条件搜索分页
Oct 24 PHP
PHP ob缓存以及ob函数原理实例解析
Nov 13 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
写一个用户在线显示的程序
2006/10/09 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
prettify 代码高亮着色器google出品
2010/12/28 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
浅析Jquery操作select
2016/12/13 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
Python如何实现大型数组运算(使用NumPy)
2020/07/24 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
几个常见的软件测试问题
2016/09/07 面试题
会计电算化专业毕业生自荐信
2013/12/20 职场文书
卫生安全检查制度
2014/02/04 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
行政助理工作职责范本
2014/03/04 职场文书
法人委托书范本
2014/09/15 职场文书
alibaba seata服务端具体实现
2022/02/24 Java/Android
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis