PHP实现zip压缩打包下载
先来看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压缩打包下载的更多相关文章
- 服务端生成word并压缩打包下载
所需工具 phpwrod 库 php_zip 扩展 下载phpword库,放到类加载路径. 安装php_zip扩展 下载地址 http://pecl.php.net/package/zip linux ...
- java.util.zip压缩打包文件总结二: ZIP解压技术
一.简述 解压技术和压缩技术正好相反,解压技术要用到的类:由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInputStream设置冗余校验码,如: Checked ...
- java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
一.简述 zip用于压缩和解压文件.使用到的类有:ZipEntry ZipOutputStream 二.具体实现代码 package com.joyplus.test; import java.io ...
- JAVA 实现将多目录多层级文件打成ZIP包后保留层级目录下载 ZIP压缩 下载
将文件夹保留目录打包为 ZIP 压缩包并下载 上周做了一个需求,要求将数据库保存的 html 界面取出后将服务器下的css和js文件一起打包压缩为ZIP文件,返回给前台:在数据库中保存的是html标签 ...
- PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩 &&搞个鸡巴毛,写少了个‘/’号,浪费了一天
PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有 ...
- Word 打包 zip 并提供下载
该篇博客记录Java Web项目将word打包zip并提供下载功能的实现和其中遇到的坑,方便后续自己的查看的参照. 1. 后台处理的java 方法 首先将所有的word生成到uploadword目录下 ...
- JavaWeb多文件上传及zip打包下载
项目中经常会使用到文件上传及下载的功能.本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分. 首先明确一点: 无法通过页面的无刷新ajax请求,直接发下载.上 ...
- ASP.NET五步打包下载Zip文件
本文版权归博客园和作者吴双共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 首先分享几个振奋人心的新闻: 1.谷歌已经宣布加入.NET基金会 2.微软加入Linux基金会, ...
- zip的打包与解包和包下载
text文件压缩包解析与下载 //压缩包下载 private StreamedContent newsTemplate; //该方法是对压缩包进行下载 public StreamedCont ...
随机推荐
- 【一天一道LeetCode】#125. Valid Palindrome
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- Hibernate3 Criteria对象详解
1.序言 Hibernate框架是目前JavaEE软件开发的企业主流框架,学习Hibernate必然要掌握ORM(对象关系映射Object/Relation Mapping)的概念思想, Hibern ...
- 海量数据挖掘MMDS week6: 决策树Decision Trees
http://blog.csdn.net/pipisorry/article/details/49445465 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- Django练习——TodoList
TodoList是django入门一个比较基础的例程,主要参考如下博客,写的非常好: simple-todo: http://www.cnblogs.com/cacique/archive/2012/ ...
- 9、Libgdx的输入处理
(官网:www.libgdx.cn) 不同的平台有着不同的输入方式.桌面用户可以通过键盘和鼠标与应用进行交互,基于浏览器的游戏也是这样.在Android中,鼠标被触摸屏所替代,通常没有实体键盘.And ...
- java的输出类
System.out这个类是PrintStream类,定义如下 public class PrintStream extends FilterOutputStream PrintStream都是用pr ...
- python3.4 + Django1.7.7 表单的一些问题
上面是没有调用cleaned_data的提交结果,可见模版直接把form里面的整个标签都接收过来了 下面是调用cleaned_data 的结果 django 的表单,提交上来之后是这样的: #codi ...
- Mahout 系列之--canopy 算法
Canopy 算法,流程简单,容易实现,一下是算法 (1)设样本集合为S,确定两个阈值t1和t2,且t1>t2. (2)任取一个样本点p属于S,作为一个Canopy,记为C,从S中移除p. (3 ...
- Leetcode_121_Best Time to Buy and Sell Stock
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43024967 Say you have an array ...
- 在多台PC上进行ROS通讯-学习笔记
首先,致谢易科(ExBot)和ROSWiki中文社区. 重要参考文献: Running ROS across multiple machines http://wiki.ros.org/ROS/Tut ...