转: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 ...
随机推荐
- AngularJS测试二 jasmine测试路由 控制器 过滤器 事件 服务
测试应用 1.测试路由 我们需要检测路由是否在运作,是否找到了,或者是404了.我们要确认路由事件触发了,预期的模板是否真的加载了.既然路由会改变页面的地址(URL)和页面内容,我们需要检测路由是否被 ...
- angularJS 服务三
路由 一 简介 1.路由机制 为了实现无刷新的视图切换,我们通常会用ajax请求从后台取数据,然后套上HTML模板渲染在页面上,然而ajax的一个致命缺点就是导致浏览器后退按钮失效,尽管我们可以在页面 ...
- Solr和ES对比
Solr与ES(ElasticSearch)对比 搜索引擎选择: Elasticsearch与Solr 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分 ...
- Genymotion开始搞起~
简介 一:什么是GenymotionGenymotion是一款完全超越BlueStacks的安卓模拟器,正如它中文官网的介绍:快到极致的Android模拟器.英文官网:http://www.genym ...
- Mono For Android离线激活
我们之前创建过Mono For Android的开发环境,但是使用一段时间后就说明证书过期,那如何破解呢? 但我说的这个也就只能使用免费的证书. 首先下载免费的证书,monoandroid.licx, ...
- LeetCode:Permutations(求全排列)
Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...
- Qt 学习之路 :自定义只读模型
model/view 模型将数据与视图分割开来,也就是说,我们可以为不同的视图,QListView.QTableView和QTreeView提供一个数据模型,这样我们可以从不同角度来展示数据的方方面面 ...
- Android短信的发送和接收监听
/**发送与接收的广播**/ String SENT_SMS_ACTION = "SENT_SMS_ACTION"; String DELIVERED_SMS_ACTION = & ...
- Android(java)学习笔记230:服务(service)之绑定服务的细节
绑定服务的细节 1. 如果onbind方法返回值是null,onServiceConnect方法就不会被调用: 2. 绑定的服务,在系统设置界面,正在运行条目是看不到的: 3. 绑定的服务,不求同时生 ...
- Command 命令模式
简介 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于[行为请求者]与[行为实现者]解耦,可实现二者之间的松耦合,以便适应变化. 将一个请求封装为一个对象,从而使你可用不同 ...