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 相关文章推荐
打造计数器DIY三步曲(下)
Oct 09 PHP
MYSQL数据库初学者使用指南
Nov 16 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
Oct 27 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
php url路由入门实例
Apr 23 PHP
使用新浪微博API的OAuth认证发布微博实例
Mar 27 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
10条php编程小技巧
Jul 07 PHP
PHP7.0版本备注
Jul 23 PHP
php简单统计中文个数的方法
Sep 30 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
Apr 01 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 mail()函数使用及配置方法
2014/01/14 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
javascript调试说明
2010/06/07 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
2016/06/13 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
2017/07/05 NodeJs
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
node内置调试方法总结
2018/02/22 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
详解JavaScript类型判断的四种方法
2020/10/21 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
python中字典(Dictionary)用法实例详解
2015/05/30 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
2014年电教工作总结
2014/12/19 职场文书
公务员个人考察材料
2014/12/23 职场文书
团组织推荐意见
2015/06/05 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
进行数据处理的6个 Python 代码块分享
2022/04/06 Python