先来看PHP实现文件及文件夹的zip压缩

这里使用PHP扩展的ZipArchive类,在使用之前要将php.ini文件中的zlib.output_compression设置为On

代码如下:

  1. public function addFileToZip($path, $current, $zip) {
  2. // 打开文件夹资源
  3. $handler = opendir($path);
  4. // 循环读取文件夹内容
  5. while(($filename = readdir($handler)) !== false) {
  6. // 过滤掉Linux系统下的.和..文件夹
  7. if ($filename != '.' && $filename != '..') {
  8. // 文件指针当前位置指向的如果是文件夹,就递归压缩
  9. if (is_dir($path.'/'.$filename)) {
  10. $this->addFileToZip($path.'/'.$filename, $filename, $zip);
  11. }else {
  12. // 为了在压缩文件的同时也将文件夹压缩,可以设置第二个参数为文件夹/文件的形式,文件夹不存在自动创建压缩文件夹
  13. $zip->addFile($path.'/'.$filename, $current.'/'.$filename);
  14. }
  15. }
  16. }
  17. @closedir($handler);
  18. }
  19. $zipName = 'your zip file path';
  20. // 如果压缩文件不存在,就创建压缩文件
  21. if (! is_file($zipName)) {
  22. $fp = fopen($zipName, 'w');
  23. fclose($fp);
  24. }
  25. $zip = new \ZipArchive();
  26. // OVERWRITE选项表示每次压缩时都覆盖原有内容,但是如果没有那个压缩文件的话就会报错,所以事先要创建好压缩文件
  27. // 也可以使用CREATE选项,此选项表示每次压缩时都是追加,不是覆盖,如果事先压缩文件不存在会自动创建
  28. if ($zip->open($zipName, \ZipArchive::OVERWRITE) === true) {
            $current = 'uplaods/'; // 你要压缩的文件的主目录
  29. $compress->addFileToZip($path, $current, $zip);
  30. $zip->close();
  31. }else {
  32. exit('下载失败!');
  33. }

在压缩完之后我们可能还需要下载,而且下载完之后还可以删除压缩文件。

代码如下:

  1. class Download
  2. {
  3. public static function downloadFile($filePath,$showName) {
  4. if (is_file($filePath)) {
  5. //打开文件
  6. $file = fopen($filePath,"r");
  7. //返回的文件类型
  8. Header("Content-type: application/octet-stream");
  9. //按照字节大小返回
  10. Header("Accept-Ranges: bytes");
  11. //返回文件的大小
  12. Header("Accept-Length: ".filesize($filePath));
  13. //这里设置客户端的弹出对话框显示的文件名
  14. Header("Content-Disposition: attachment; filename=".$showName);
  15. //一次性将数据传输给客户端
  16. //echo fread($file, filesize($filePath));
  17. //一次只传输1024个字节的数据给客户端
  18. //向客户端回送数据
  19. $buffer=1024;//
  20. //判断文件是否读完
  21. while (!feof($file)) {
  22. //将文件读入内存
  23. $file_data = fread($file, $buffer);
  24. //每次向客户端回送1024个字节的数据
  25. echo $file_data;
  26. }
  27. return true;
  28. }else {
  29. return false;
  30. }
  31. }
  32. }
  33.  
  34. // 调用这个方法的部分
  35. // 下载压缩后的文件
  36. if (! Download::downloadFile($zipName, $showName)) {
  37. return "<script>alert('下载失败!')</script>";
  38. }else {
  39. @unlink($zipName);
  40. }

以上的代码基本可以实现简单的打包下载功能。

PHP实现zip压缩打包下载的更多相关文章

  1. 服务端生成word并压缩打包下载

    所需工具 phpwrod 库 php_zip 扩展 下载phpword库,放到类加载路径. 安装php_zip扩展 下载地址 http://pecl.php.net/package/zip linux ...

  2. java.util.zip压缩打包文件总结二: ZIP解压技术

    一.简述 解压技术和压缩技术正好相反,解压技术要用到的类:由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInputStream设置冗余校验码,如: Checked ...

  3. java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹

    一.简述 zip用于压缩和解压文件.使用到的类有:ZipEntry  ZipOutputStream 二.具体实现代码 package com.joyplus.test; import java.io ...

  4. JAVA 实现将多目录多层级文件打成ZIP包后保留层级目录下载 ZIP压缩 下载

    将文件夹保留目录打包为 ZIP 压缩包并下载 上周做了一个需求,要求将数据库保存的 html 界面取出后将服务器下的css和js文件一起打包压缩为ZIP文件,返回给前台:在数据库中保存的是html标签 ...

  5. PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩 &&搞个鸡巴毛,写少了个‘/’号,浪费了一天

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

  6. Word 打包 zip 并提供下载

    该篇博客记录Java Web项目将word打包zip并提供下载功能的实现和其中遇到的坑,方便后续自己的查看的参照. 1. 后台处理的java 方法 首先将所有的word生成到uploadword目录下 ...

  7. JavaWeb多文件上传及zip打包下载

    项目中经常会使用到文件上传及下载的功能.本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分.  首先明确一点:  无法通过页面的无刷新ajax请求,直接发下载.上 ...

  8. ASP.NET五步打包下载Zip文件

    本文版权归博客园和作者吴双共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 首先分享几个振奋人心的新闻: 1.谷歌已经宣布加入.NET基金会 2.微软加入Linux基金会, ...

  9. zip的打包与解包和包下载

    text文件压缩包解析与下载 //压缩包下载  private StreamedContent newsTemplate; //该方法是对压缩包进行下载     public StreamedCont ...

随机推荐

  1. 【一天一道LeetCode】#125. Valid Palindrome

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  2. Hibernate3 Criteria对象详解

    1.序言 Hibernate框架是目前JavaEE软件开发的企业主流框架,学习Hibernate必然要掌握ORM(对象关系映射Object/Relation Mapping)的概念思想, Hibern ...

  3. 海量数据挖掘MMDS week6: 决策树Decision Trees

    http://blog.csdn.net/pipisorry/article/details/49445465 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  4. Django练习——TodoList

    TodoList是django入门一个比较基础的例程,主要参考如下博客,写的非常好: simple-todo: http://www.cnblogs.com/cacique/archive/2012/ ...

  5. 9、Libgdx的输入处理

    (官网:www.libgdx.cn) 不同的平台有着不同的输入方式.桌面用户可以通过键盘和鼠标与应用进行交互,基于浏览器的游戏也是这样.在Android中,鼠标被触摸屏所替代,通常没有实体键盘.And ...

  6. java的输出类

    System.out这个类是PrintStream类,定义如下 public class PrintStream extends FilterOutputStream PrintStream都是用pr ...

  7. python3.4 + Django1.7.7 表单的一些问题

    上面是没有调用cleaned_data的提交结果,可见模版直接把form里面的整个标签都接收过来了 下面是调用cleaned_data 的结果 django 的表单,提交上来之后是这样的: #codi ...

  8. Mahout 系列之--canopy 算法

    Canopy 算法,流程简单,容易实现,一下是算法 (1)设样本集合为S,确定两个阈值t1和t2,且t1>t2. (2)任取一个样本点p属于S,作为一个Canopy,记为C,从S中移除p. (3 ...

  9. Leetcode_121_Best Time to Buy and Sell Stock

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43024967 Say you have an array ...

  10. 在多台PC上进行ROS通讯-学习笔记

    首先,致谢易科(ExBot)和ROSWiki中文社区. 重要参考文献: Running ROS across multiple machines http://wiki.ros.org/ROS/Tut ...