几行代码轻松实现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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Oct 09 PHP
一些常用的php函数
Dec 06 PHP
深入理解:XML与对象的序列化与反序列化
Jun 08 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
Dec 20 PHP
PHP小教程之实现链表
Jun 09 PHP
PHP中常用的输出函数总结
Sep 22 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
PHP实现长文章分页实例代码(附源码)
Feb 03 PHP
php压缩文件夹最新版
Jul 18 PHP
PHP微信H5支付开发实例
Jul 25 PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 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处理单文件、多文件上传代码分享
2016/08/24 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
2020/04/14 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
Django中使用Celery的方法示例
2018/11/29 Python
使用python进行拆分大文件的方法
2018/12/10 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
delegate与普通函数的区别
2014/01/22 面试题
UNIX特点都有哪些
2016/04/05 面试题
小学课外活动总结
2014/07/09 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL