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&amp;MYSQL分页原理及实现
Jan 02 PHP
PHP中函数内引用全局变量的方法
Oct 20 PHP
PHP 递归效率分析
Nov 24 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
Jan 10 PHP
用PHP代替JS玩转DOM的思路及示例代码
Jun 15 PHP
php中instanceof 与 is_a()区别分析
Mar 03 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
Laravel SQL语句记录方式(推荐)
May 26 PHP
php preg_match的匹配不同国家语言实例
Dec 29 PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 PHP
PHP数组与字符串互相转换实例
May 05 PHP
ThinkPHP5和ThinkPHP6的区别
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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
Javascript 读书笔记索引贴
2010/01/11 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
2010/12/04 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
[03:09]2014DOTA2国际邀请赛 赛场上的美丽风景线 中国Coser也爱DOTA2
2014/07/20 DOTA
python求素数示例分享
2014/02/16 Python
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
使用Python对Excel进行读写操作
2017/03/30 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
python设置环境变量的作用整理
2020/02/17 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
表达自我的市场:Society6
2018/08/01 全球购物
办公室驾驶员岗位职责
2013/11/15 职场文书
异地年检委托书范本
2014/09/24 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
javascript的var与let,const之间的区别详解
2022/02/18 Javascript
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS