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 相关文章推荐
来自phpguru得Php Cache类源码
Apr 15 PHP
PHP中使用数组实现堆栈数据结构的代码
Feb 05 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
php获取文件内容最后一行示例
Jan 09 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
php简单统计中文个数的方法
Sep 30 PHP
Yii框架中sphinx索引配置方法解析
Oct 18 PHP
php 运算符与表达式详细介绍
Nov 30 PHP
php 数组元素快速去重
May 05 PHP
PHP实现的贪婪算法实例
Oct 17 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 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通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
2019/10/30 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
vue实现短信验证码输入框
2020/04/17 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
python简单获取数组元素个数的方法
2015/07/13 Python
详解python的几种标准输出重定向方式
2016/08/15 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
python实现横向拼接图片
2020/03/23 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
2021/03/03 Python
使用css3绘制出各种几何图形
2016/08/17 HTML / CSS
GafasWorld西班牙:购买太阳镜、眼镜和隐形眼镜
2019/09/08 全球购物
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
公司应聘求职信
2014/06/21 职场文书
授权委托书格式
2014/07/31 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
优质护理服务心得体会
2016/01/22 职场文书