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 Xdebug 调试扩展的安装与使用.
Mar 13 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
Jun 02 PHP
php中用于检测一个地理IP地址是否可用的代码
Feb 19 PHP
php提示undefined index的几种解决方法
May 21 PHP
深入php-fpm的两种进程管理模式详解
Jun 03 PHP
探讨php中header的用法详解
Jun 07 PHP
回帖脱衣服的图片实现代码
Feb 15 PHP
php创建无限级树型菜单
Nov 05 PHP
thinkPHP5.0框架环境变量配置方法
Mar 17 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
Jan 04 PHP
PHP 裁剪图片
Mar 09 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
自定义session存储机制避免会话保持问题
2014/10/08 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
详解ES6中的 Set Map 数据结构学习总结
2018/11/06 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
Python实现Dijkstra算法
2018/10/17 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
Python3 修改默认环境的方法
2019/02/16 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
Europcar葡萄牙:葡萄牙汽车和货车租赁
2017/10/13 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
工艺工程师工作职责
2013/11/23 职场文书
公司委托书范本
2014/04/04 职场文书
政治表现评语
2014/05/04 职场文书
党员个人对照检查材料
2014/10/01 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
高考升学宴答谢词
2015/01/20 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
学校百日安全活动总结
2015/05/07 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL