转: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 ...
随机推荐
- Jinja2模版语言自定义filter的使用
Jinja2模版语言,自带有一些filter,能够在前端的模版中控制数据按照相应的方式显示.比如以下两种filter,分别能在前端控制数字的近似精度显示和根据字符串长度补齐: round(value, ...
- hdu 4424 Conquer a New Region (并查集)
///题意:给出一棵树.树的边上都有边权值,求从一点出发的权值和最大,权值为从一点出去路径上边权的最小值 # include <stdio.h> # include <algorit ...
- RHCE 基础学习
http://lizhenliang.blog.51cto.com/7876557/d-8
- Qt 学习之路 :Qt 模块简介
Qt 5 与 Qt 4 最大的一个区别之一是底层架构有了修改.Qt 5 引入了模块化的概念,将众多功能细分到几个模块之中.Qt 4 也有模块的概念,但是是一种很粗的划分,而 Qt 5 则更加细化.本节 ...
- iOS应用内支付(内购)的个人开发过程及坑!
本文会给大家详细介绍iOS内购,这是本人16年5月底的开发过程,希望对看完此篇文章的人有所帮助. 本文基于XcodeVersion 7.3 (7D175)版本,手机是iPhone 6,9.3系统. 部 ...
- Android(java)学习笔记231:服务(service)之混合方式开启服务
1. 前面我们已经讲过可以使用两种方式开启服务 startService----stopService: oncreate() ---> onstartCommand() ---& ...
- sublime 3 3083验证码
Sublime Text 3注册码两枚: ----- BEGIN LICENSE ----- K- Single User License EA7E- 3A099EC1 C0B5C7C5 33EBF0 ...
- SGU 199 - Beautiful People 最长上升子序列LIS
要邀请n个人参加party,每个人有力量值strength Si和魅力值 beauty Bi,如果存在两人S i ≤ S j and B i ≥ B j 或者 S i ≥ S j and B i ≤ ...
- SSH常用命令选项
SSH 是什么 SSH(全称 Secure Shell)是一种加密的网络协议.使用该协议的数据将被加密,如果在传输中间数据泄漏,也可以确保没有人能读取出有用信息.要使用 SSH,目标机器应该安装 SS ...
- Android定时器功能实现方法
在Android开发中,定时器一般有以下3种实现方法: 1.采用Handler与线程的sleep(long)方法 2.采用Handler的postDelayed(Runnable, long)方法 3 ...