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

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

代码如下:

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

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

代码如下:

class Download
{
public static function downloadFile($filePath,$showName) {
if (is_file($filePath)) {
//打开文件
$file = fopen($filePath,"r");
//返回的文件类型
Header("Content-type: application/octet-stream");
//按照字节大小返回
Header("Accept-Ranges: bytes");
//返回文件的大小
Header("Accept-Length: ".filesize($filePath));
//这里设置客户端的弹出对话框显示的文件名
Header("Content-Disposition: attachment; filename=".$showName);
//一次性将数据传输给客户端
//echo fread($file, filesize($filePath));
//一次只传输1024个字节的数据给客户端
//向客户端回送数据
$buffer=1024;//
//判断文件是否读完
while (!feof($file)) {
//将文件读入内存
$file_data = fread($file, $buffer);
//每次向客户端回送1024个字节的数据
echo $file_data;
}
return true;
}else {
return false;
}
}
} // 调用这个方法的部分
// 下载压缩后的文件
if (! Download::downloadFile($zipName, $showName)) {
return "<script>alert('下载失败!')</script>";
}else {
@unlink($zipName);
}

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

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. git常用技巧

    一般的过程: ①如果还没有库先用 git clone 克隆一个库. ②使用 git checkout master切换到master分支. ③使用 git pull 同步远程master分支(即git ...

  2. 【一天一道LeetCode】#88. Merge Sorted Array

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

  3. 一致性Hash算法介绍(分布式环境算法)

    32的整数环(这个环被称作一致性Hash环),根据节点名称的Hash值(其分布范围同样为0~232)将节点放置在这个Hash 环上.然后根据KEY值计算得到其Hash值(其分布范围也同样为0~232  ...

  4. ROS_Kinetic_05 ROS基础内容(二)

    ROS_Kinetic_05 ROS基础内容(二) 1. ROS节点node 官网教程:http://wiki.ros.org/cn/ROS/Tutorials/UnderstandingNodes ...

  5. Mahout推荐算法之ItemBased

    Mahout推荐之ItemBased 一.   算法原理 (一)    基本原理 如下图评分矩阵所示:行为user,列为item. 图(1) 该算法的原理: 1.  计算Item之间的相似度. 2.  ...

  6. Python进阶 函数式编程和面向对象编程等

    函数式编程 函数:function 函数式:functional,一种编程范式.函数式编程是一种抽象计算机的编程模式. 函数!= 函数式(如计算!=计算机) 如下是不同语言的抽象 层次不同 高阶函数: ...

  7. CTBS问题百科

    1.浏览CTBS网站时,Service Unavailable或应用程序池自动停止的现象 解决方法: 点击"开始"-"控制面板"-"管理工具" ...

  8. 《java入门第一季》之面向对象(匿名内部类)

    1.认识匿名内部类 /* 匿名内部类 就是内部类的简化写法. 前提:存在一个类或者接口 这里的类可以是具体类也可以是抽象类. 匿名内部类的格式: new 类名或者接口名(){ 重写方法; }:这代表的 ...

  9. Linux System Programming --Chapter Nine

    这一章的标题是 "信号" ,所以本文将对信号的各个方面进行介绍,由于Linux中的信号机制远比想象的要复杂,所以,本文不会讲的很全面... 信号机制是进程之间相互传递消息的一种方法 ...

  10. Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...