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多图上传小程序代码
Jul 17 PHP
基于Zend的Captcha机制的应用
May 02 PHP
浅析PHP页面局部刷新功能的实现小结
Jun 21 PHP
php计算数组不为空元素个数的方法
Jan 27 PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
PHP模块化安装教程
Jun 01 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
Yii2 中实现单点登录的方法
Mar 09 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
Laravel如何自定义command命令浅析
Mar 23 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 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
[原创]效率较高的php下读取文本文件的代码
2008/07/02 PHP
PHP 使用redis简单示例分享
2015/03/05 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
2016/03/07 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
微信小程序列表时间戳转换实现过程解析
2019/10/12 Javascript
python脚本实现查找webshell的方法
2014/07/31 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
软件测试工程师面试问题精选
2016/10/28 面试题
Servlet的生命周期
2013/08/25 面试题
宝宝周岁宴答谢词
2014/01/26 职场文书
活动总结怎么写
2014/04/28 职场文书
放飞梦想演讲稿800字
2014/08/26 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
捐款感谢信
2015/01/20 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书