几行代码轻松实现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 22 PHP
判断PHP数组是否为空的代码
Sep 08 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
ThinkPHP验证码使用简明教程
Mar 05 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 PHP
php提取字符串中网站url地址的方法
Dec 03 PHP
PHP中iconv函数转码时截断字符问题的解决方法
Jan 21 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
PHP验证码无法显示的原因及解决办法
Aug 11 PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 PHP
PHP连接MySQL数据库操作代码实例解析
Jul 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
php SQL Injection with MySQL
2011/02/27 PHP
php使用curl发送json格式数据实例
2013/12/17 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
php实现点击可刷新验证码
2015/11/07 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
基于jquery的商品展示放大镜
2010/08/07 Javascript
表单验证的完整应用案例探讨
2013/03/29 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
vue.js 微信支付前端代码分享
2018/02/10 Javascript
Vue 获取数组键名的方法
2018/06/21 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
node.js通过url读取文件
2020/10/16 Javascript
python 生成不重复的随机数的代码
2011/05/15 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
WxPython实现无边框界面
2019/11/18 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
综合实践活动总结
2014/05/05 职场文书
龙门石窟导游词
2015/02/02 职场文书
天河观后感
2015/06/11 职场文书