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 相关文章推荐
php中常用编辑器推荐
Jan 02 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
Aug 11 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
Oct 29 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
Mar 20 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 PHP
如何在PHP中使用数组
Jun 09 PHP
PHP实现计算器小功能
Aug 28 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
关于手调机和数调机的选择
2021/03/02 无线电
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
google地图的路线实现代码
2009/08/20 Javascript
XmlUtils JS操作XML工具类
2009/10/01 Javascript
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
javascript中this的用法实践分析
2019/07/29 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
[01:00:11]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第一场 2月7日
2021/03/11 DOTA
wxPython学习之主框架实例
2014/09/28 Python
Python里disconnect UDP套接字的方法
2015/04/23 Python
Python素数检测实例分析
2015/06/15 Python
Python中协程用法代码详解
2018/02/10 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
Python 获取项目根路径的代码
2019/09/27 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
Python中的With语句的使用及原理
2020/07/29 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
四年级数学教学反思
2014/02/02 职场文书
运动会通讯稿500字
2014/02/20 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
小学生通知书评语
2014/12/31 职场文书
教师岗位职责范本
2015/04/02 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
vue3不同环境下实现配置代理
2022/05/25 Vue.js