几行代码轻松实现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 相关文章推荐
如何将一个表单同时提交到两个地方处理
Oct 09 PHP
PHP中,文件上传
Dec 06 PHP
什么是MVC,好东西啊
May 03 PHP
解析Extjs与php数据交互(增删查改)
Jun 25 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 PHP
PHP 绘制网站登录首页图片验证码
Apr 12 PHP
PHP文件操作实例总结
Sep 27 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
基于win2003虚拟机中apache服务器的访问
Aug 01 PHP
php 判断IP为有效IP地址的方法
Jan 28 PHP
PHP程序员学习使用Swoole的理由
Jun 24 PHP
PHP实现PDO操作mysql存储过程示例
Feb 13 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
php截取字符串函数分享
2015/02/02 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
Javascript UrlDecode函数代码
2010/01/09 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
基于JQuery实现图片轮播效果(焦点图)
2016/02/02 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
JS实现瀑布流布局
2017/10/21 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
对angular4子路由&amp;辅助路由详解
2018/10/09 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
python读写文件操作示例程序
2013/12/02 Python
python文件与目录操作实例详解
2016/02/22 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
python批量生成条形码的示例
2020/10/10 Python
python中pow函数用法及功能说明
2020/12/04 Python
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
售前工程师职业生涯规划
2014/03/02 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL