几行代码轻松实现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之第六天
Oct 09 PHP
php 中文处理函数集合
Aug 27 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
Zend的MVC机制使用分析(一)
May 02 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
Aug 01 PHP
PHPThumb图片处理实例
May 03 PHP
ThinkPHP基本的增删查改操作实例教程
Aug 22 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
php数组键值用法实例分析
Feb 27 PHP
Redis构建分布式锁
Mar 28 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 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实现批量生成App各种尺寸Logo
2015/03/19 PHP
golang与PHP输出excel示例
2016/07/22 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
Javascript学习笔记1 数据类型
2010/01/11 Javascript
js查错流程归纳
2012/05/04 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
js实现随机8位验证码
2020/07/24 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
学习python处理python编码问题
2011/03/13 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
Python中内置的日志模块logging用法详解
2016/07/12 Python
Python实现求数列和的方法示例
2018/01/12 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
台风停课通知
2015/04/24 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
浅谈Node的内存泄露问题
2022/05/06 NodeJs
Docker部署Mysql8的实现步骤
2022/07/07 Servers