php实现对文件压缩简单的方法


Posted in PHP onSeptember 29, 2019

压缩一个文件

我们将一个文件生成一个压缩包。

<?php

$path = "c:/wamp/www/log.txt";

$filename = "test.zip";

$zip = new ZipArchive();

$zip->open($filename,ZipArchive::CREATE);  //打开压缩包

$zip->addFile($path,basename($path));  //向压缩包中添加文件

$zip->close(); //关闭压缩包

上述代码将c:/wamp/www/log.txt文件压缩生成了test.zip,并保存在当前目录。

压缩多个文件

压缩多个文件,其实就是addFile执行多次,可以通过数组的遍历来实现。

<?php

$fileList = array(

  "c:/wamp/www/log.txt",

  "c:/wamp/www/weixin.class.php"

);

$filename = "test.zip";

$zip = new ZipArchive();

$zip->open($filename,ZipArchive::CREATE);  //打开压缩包

foreach($fileList as $file){

  $zip->addFile($file,basename($file));  //向压缩包中添加文件

}

$zip->close(); //关闭压缩包

压缩一个目录

<?php

function addFileToZip($path,$zip){

  $handler=opendir($path); //打开当前文件夹由$path指定。

  while(($filename=readdir($handler))!==false){

    if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..',不要对他们进行操作

      if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归

        addFileToZip($path."/".$filename, $zip);

      }else{ //将文件加入zip对象

        $zip->addFile($path."/".$filename);

      }

    }

  }

  @closedir($path);

}

$zip=new ZipArchive();

if($zip->open('rsa.zip', ZipArchive::OVERWRITE)=== TRUE){

  addFileToZip('rsa/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法

  $zip->close(); //关闭处理的zip文件

}

压缩并下载zip包

我的时候,我们需要打包之后,提供下载,然后删除压缩包。

可以分为以下几步:

(1)判断给出的路径,是文件夹,还是文件。文件夹还需要遍历添加文件。

(2)设置相关文件头,并使用readfile函数提供下载。

(3)使用unlink函数删除压缩包。

<?php

function addFileToZip($path,$zip){

  $handler=opendir($path); //打开当前文件夹由$path指定。

  while(($filename=readdir($handler))!==false){

    if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..',不要对他们进行操作

      if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归

        addFileToZip($path."/".$filename, $zip);

      }else{ //将文件加入zip对象

        $zip->addFile($path."/".$filename);

      }

    }

  }

  @closedir($path);

}

$zip=new ZipArchive();

if($zip->open('rsa.zip', ZipArchive::OVERWRITE)=== TRUE){

  $path = 'rsa/';

  if(is_dir($path)){ //给出文件夹,打包文件夹

    addFileToZip($path, $zip);

  }else if(is_array($path)){ //以数组形式给出文件路径

    foreach($path as $file){

      $zip->addFile($file);

    }

  }else{   //只给出一个文件

    $zip->addFile($path);

  }

  $zip->close(); //关闭处理的zip文件

}

以上就是php如何实现对文件压缩的详细内容,感谢大家的学习和对三水点靠木的支持。

PHP 相关文章推荐
做个自己站内搜索引擎
Oct 09 PHP
php后退一页表单内容保存实现方法
Jun 17 PHP
php 操作调试的方法
Jul 12 PHP
PHP实现模仿socket请求返回页面的方法
Nov 04 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 PHP
PHP实现批量上传单个文件
Dec 29 PHP
php bootstrap实现简单登录
Mar 08 PHP
关于PHP内置的字符串处理函数详解
Feb 04 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
Dec 29 PHP
Laravel 添加多语言提示信息的方法
Sep 29 #PHP
php实现登录页面的简单实例
Sep 29 #PHP
php实现推荐功能的简单实例
Sep 29 #PHP
php实现分页功能的详细实例方法
Sep 29 #PHP
laravel实现于语言包的完美切换方法
Sep 29 #PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 #PHP
Laravel中validation验证 返回中文提示 全局设置的方法
Sep 29 #PHP
You might like
基于mysql的bbs设计(四)
2006/10/09 PHP
用PHP实现多服务器共享SESSION数据的方法
2007/03/16 PHP
php文件操作相关类实例
2015/06/18 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
关于JS中二维数组的声明方法
2016/09/24 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
Python3中exp()函数用法分析
2019/02/19 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
什么是属性访问器
2015/10/26 面试题
酒店led欢迎词
2014/01/09 职场文书
小学教师国培感言
2014/02/08 职场文书
税务干部鉴定材料
2014/02/11 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
征求意见函
2015/06/05 职场文书
《社戏》教学反思
2016/02/22 职场文书
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server