几行代码轻松实现PHP文件打包下载zip


Posted in PHP onMarch 01, 2017

本文实例为大家分享了PHP文件打包下载zip的具体代码,供大家参考,具体内容如下

<?php
//获取文件列表
function list_dir($dir){
   $result = array();
   if (is_dir($dir)){
   $file_dir = scandir($dir);
   foreach($file_dir as $file){
    if ($file == '.' || $file == '..'){
    continue;
    }
    elseif (is_dir($dir.$file)){
    $result = array_merge($result, list_dir($dir.$file.'/'));
    }
    else{
    array_push($result, $dir.$file);
    }
   }
   }
   return $result;
  }

//获取列表 
$datalist=list_dir('../');
$filename = "./bak.zip"; //最终生成的文件名(含路径)  
if(!file_exists($filename)){  
//重新生成文件  
  $zip = new ZipArchive();//使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释  
  if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {  
    exit('无法打开文件,或者文件创建失败');
  }  
  foreach( $datalist as $val){  
    if(file_exists($val)){  
      $zip->addFile( $val, basename($val));//第二个参数是放在压缩包中的文件名称,如果文件可能会有重复,就需要注意一下  
    }  
  }  
  $zip->close();//关闭  
}  
if(!file_exists($filename)){  
  exit("无法找到文件"); //即使创建,仍有可能失败。。。。  
}  
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header('Content-disposition: attachment; filename='.basename($filename)); //文件名  
header("Content-Type: application/zip"); //zip格式的  
header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件  
header('Content-Length: '. filesize($filename)); //告诉浏览器,文件大小  
@readfile($filename);
?>

PHP ZipArchive是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP扩展已经开启,具体开启方法这里就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流。

这里整理一下利用php zipArchive进行文件的压缩与解压缩的常用的示例供参考。

一、解压缩zip文件

$zip=new ZipArchive;//新建一个ZipArchive的对象
 if($zip->open('test.zip')===TRUE){
 $zip->extractTo('images');//假设解压缩到在当前路径下images文件夹内
 $zip->close();//关闭处理的zip文件
}

二、将文件压缩成zip文件

$zip=new ZipArchive;
if($zip->open('test.zip',ZipArchive::OVERWRITE)===TRUE){
 $zip->addFile('image.txt');//假设加入的文件名是image.txt,在当前路径下
 $zip->close();
}

三、文件追加内容添加到zip文件

$zip=new ZipArchive;
$res=$zip->open('test.zip',ZipArchive::CREATE);
if($res===TRUE){
 $zip->addFromString('test.txt','file content goes here');
 $zip->close();
 echo 'ok';
}else{
 echo 'failed';
}

四、将文件夹打包成zip文件

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('images.zip', ZipArchive::OVERWRITE)=== TRUE){
 addFileToZip('images/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
 $zip->close(); //关闭处理的zip文件
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php join函数应用
May 04 PHP
php学习笔记 数组遍历实现代码
Jun 09 PHP
php 下载保存文件保存到本地的两种实现方法
Aug 12 PHP
php文件夹与文件目录操作函数介绍
Sep 09 PHP
php对数组排序代码分享
Feb 24 PHP
php统计数组元素个数的方法
Jul 02 PHP
PHP的Yii框架中过滤器相关的使用总结
Mar 29 PHP
php文件上传后端处理小技巧
May 22 PHP
php 实现301重定向跳转实例代码
Jul 18 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 PHP
php7安装yar扩展的方法详解
Aug 03 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 PHP
PHP去除字符串最后一个字符的三种方法实例
Mar 01 #PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 #PHP
PHP实现图片批量打包下载功能
Mar 01 #PHP
深入解析PHP中SESSION反序列化机制
Mar 01 #PHP
yii2使用GridView实现数据全选及批量删除按钮示例
Mar 01 #PHP
PHP插件PHPMailer发送邮件功能
Feb 28 #PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 #PHP
You might like
来自phpguru得Php Cache类源码
2010/04/15 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
python异步存储数据详解
2019/03/19 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
动态设置django的model field的默认值操作步骤
2020/03/30 Python
python 实现两个线程交替执行
2020/05/02 Python
python中Django文件上传方法详解
2020/08/05 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
白宫黑市官网:White House Black Market
2016/11/17 全球购物
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
护士自我鉴定范文
2013/10/06 职场文书
会计自我鉴定
2013/11/02 职场文书
5.1手机促销活动
2014/01/17 职场文书
劳动之星获奖感言
2014/02/01 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
三国演义读书笔记
2015/06/25 职场文书
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL