转:PHP 使用ZipArchive压缩文件并下载
原文来自于:http://courages.us/archives/176
网站上需要提供一些打印数据给用户下载,这些文件每次都需要重新生成,因为随时都会有新的数据产生。网络上关于PHP的压缩功能实现有多种方式,比如PclZip,ZipArchive等。PclZip是使用PHP写的一个压缩解压类,方便使用,不用安装扩展;而ZipArchive则在PHP 5.3之后随PHP携带发行,不需要再去开启扩展。本文则使用PHP自带的ZipArchive进行文档压缩。
由于还要提供给用户下载,这里参考了网络上下载类,以下为downlaod.class.php代码
<?php
class
download{
protected
$_filename
;
protected
$_filepath
;
protected
$_filesize
;
//文件大小
public
function
__construct(
$filename
){
$this
->_filename=
$filename
;
$this
->_filepath=dirname(
__FILE__
).
'/'
.
$filename
;
}
public
function
__destruct() {
if
(
file_exists
(
$this
->_filepath)){
unlink(
$this
->_filepath);
}
}
//获取文件名
public
function
getfilename(){
return
$this
->_filename;
}
//获取文件路径(包含文件名)
public
function
getfilepath(){
return
$this
->_filepath;
}
//获取文件大小
public
function
getfilesize(){
return
$this
->_filesize=number_format(
filesize
(
$this
->_filepath)/(1024*1024),2);
//去小数点后两位
}
//下载文件的功能
public
function
getfiles(){
//检查文件是否存在
if
(
file_exists
(
$this
->_filepath)){
//打开文件
$file
=
fopen
(
$this
->_filepath,
"r"
);
//返回的文件类型
Header(
"Content-type: application/octet-stream"
);
//按照字节大小返回
Header(
"Accept-Ranges: bytes"
);
//返回文件的大小
Header(
"Accept-Length: "
.
filesize
(
$this
->_filepath));
//这里对客户端的弹出对话框,对应的文件名
Header(
"Content-Disposition: attachment; filename="
.
$this
->_filename);
//修改之前,一次性将数据传输给客户端
echo
fread
(
$file
,
filesize
(
$this
->_filepath));
//修改之后,一次只传输1024个字节的数据给客户端
//向客户端回送数据
$buffer
=1024;
//
//判断文件是否读完
while
(!
feof
(
$file
)) {
//将文件读入内存
$file_data
=
fread
(
$file
,
$buffer
);
//每次向客户端回送1024个字节的数据
echo
$file_data
;
}
fclose(
$file
);
}
else
{
echo
"<script>alert('对不起,您要下载的文件不存在');</script>"
;
}
}
}
ZipArchive有两个添加文件的方法addFile 和addFromString,addFile可将现有文件添加进去,而addFromStrin则可以添加一些动态的文本 。在要下载文件中则简单调用,代码如下
<?php
include
'download.class.php'
;
$res
=
''
;
//动态结果
$zip
=
new
ZipArchive();
$zipname
=
date
(
'YmdHis'
,time()).
'.zip'
;
//随机文件名
if
(!
file_exists
(
$zipname
)){
$zip
->open(
$zipname
,ZipArchive::OVERWRITE);
//创建一个空的zip文件
//$zip->addFile('/images/show.pic','show.pic');//将/images/show.pic文件添加进去
//$content=file_get_contents('http://127.0.0.1/data.php?r='$res);
//if ( $content !== false ) {
//$zip->addFromString('data.xml',$content);//使用字符串的方式动态添加
//}
$zip
->addFromString(
'test.txt'
,
'some text ...'
);
$zip
->close();
$dw
=
new
download(
$zipname
);
//下载文件
$dw
->getfiles();
unlink(
$zipname
);
//下载完成后要主动删除
}
转:PHP 使用ZipArchive压缩文件并下载的更多相关文章
- 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
总结: 使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...
- Jsp实现筛选并压缩文件批量下载
Jsp实现筛选并压缩文件批量下载 首先明确一下需求,网页端点击一下button,传递特定的参数到download.jsp网页,筛选文件,对过滤得到的文件进行压缩,然后返回前端一个压缩包下载. 以下的代 ...
- php 3.2 生成压缩文件,并下载
public function zip_download() { $array = array( 'http://local.qki.com/site_upload/erweima/20190826/ ...
- php使用ZipArchive压缩文件的心得
$zip=new ZipArchive; if($zip->open('test.zip',ZipArchive::CREATE)===TRUE){ $zip->addFile('imag ...
- 利用DotNetZip服务端压缩文件并下载
public void DownFile() { string filePath = Server.MapPath("/Files/txt/bb.txt" ...
- PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩 &&搞个鸡巴毛,写少了个‘/’号,浪费了一天
PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有 ...
- php压缩文件夹并下载到本地
/** * @param $path 要压缩的文件夹路径 * @param $filename 要生成的压缩包名称 */ public function create_zip($path,$filen ...
- .Net类库 压缩文件 与 Ionic.Zip 批量压缩不同目录文件与解压 文件
using System; using System.IO; using System.IO.Compression; using System.Linq; using System.Text; us ...
- php加密压缩文件
前言 近几日,用爬虫采集的了一些数据,存放到硬盘中,随着数据量越来越多,所以想上传到网盘当中,可是不加下密又觉得不放心, 所以开始用PHP的zip模块进行压缩加密. 开始 $zipArc = new ...
随机推荐
- storyBoard方式ScrollView的AutoLayout
在使用storyboard和xib时,我们经常要用到ScrollView,还有自动 布局AutoLayout,但是ScrollView和AutoLayout 结合使用,相对来说有点复杂.根据实践,我说 ...
- HDU - 4815 Little Tiger vs. Deep Monkey (长春赛区C题)
题意:有A,B两个人.n道题目.每题有相应的分数.B答对题目的概率是0.5.求A不输给B的概率不小于P要拿的最低分数 思路:DP,dp[i][j]来表示B答了前i题后分数为j的概率,,然后通过B的概率 ...
- POJ 3978 Primes(求范围素数个数)
POJ 3978 Primes(求范围素数个数) id=3978">http://poj.org/problem? id=3978 题意: 给你一个区间范围A和B,要你求出[A,B]内 ...
- Linux 下实现控制屏幕显示信息和光标的状态
//display.h /************************************************************* FileName : display.h File ...
- Meth | elementary OS常用配置
一,搜狗输入法 sudo apt-get remove ibussudo add-apt-repository ppa:fcitx-team/nightlysudo apt-get updatesud ...
- 一行代码实现iOS序列化与反序列化(runtime)
一.变量声明 为便于下文讨论,提前创建父类Biology以及子类Person: Biology: @interface Biology : NSObject { NSInteger *_hairCou ...
- 记录jpcap在Ubuntu&Window下的配置过程
众所周知,Java虽然在TCP/UDP传输方面给予了良好的定义,但是标准库java.net对于网络层以下的控制是无能为力的.Jpcap就是为了处理这一问题而出现的中间件.它调用底层的winpcap/l ...
- TCP/IP协议原理与应用笔记06:OSI参考模型全称
1. ISO是一个组织,OSI是一个模型. 2. OSI不是协议,是网络体系结构的概念模型 3. OSI参考模型全称为: Open System Interconnection Reference M ...
- JFreeChart当鼠标停留在热点提示自定义信息功能
当鼠标停留在数据点时,希望有提示信息显示,但是根据业务需要,我们需要自定义显示一下信息!具体功能实现如下: 首先我们要弄明白,Jfreechart鼠标提示信息显示主要是得到一个数据的map对象,该ma ...
- Bernese安装及使用
一.安装: 伯尔尼软件的安装很简单,但是在64位下,可能perl解释器安装不成功,我找了一个,并且可用,下载地址: 链接:http://pan.baidu.com/s/1hr8fgEC 密码:fj8b ...