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获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
基于curl数据采集之正则处理函数get_matches的使用
Apr 28 PHP
php strnatcmp()函数的用法总结
Nov 27 PHP
PHP之预定义接口详解
Jul 29 PHP
高质量PHP代码的50个实用技巧必备(上)
Jan 22 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
Mar 31 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
PHP生成随机数的方法总结
Mar 01 PHP
Yii框架核心组件类实例详解
Aug 06 PHP
php微信小程序解包过程实例详解
Mar 31 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 dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
解析php dirname()与__FILE__常量的应用
2013/06/24 PHP
php目录拷贝实现方法
2015/07/10 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
js 金额格式化来回转换示例
2014/02/23 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
js实现微博发布小功能
2017/01/12 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
python 正则式 概述及常用字符
2009/05/07 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
python批量创建指定名称的文件夹
2019/03/21 Python
python类中super() 的使用解析
2019/12/19 Python
Pytorch的mean和std调查实例
2020/01/02 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
理财投资建议书
2014/03/12 职场文书
食堂标语大全
2014/06/11 职场文书
公共场所标语
2014/06/30 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
银行求职信范文
2019/05/13 职场文书
详解nodejs内置模块
2021/05/06 NodeJs