原文来自于: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($filefilesize($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压缩文件并下载的更多相关文章

  1. 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件

    总结:                                                          使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...

  2. Jsp实现筛选并压缩文件批量下载

    Jsp实现筛选并压缩文件批量下载 首先明确一下需求,网页端点击一下button,传递特定的参数到download.jsp网页,筛选文件,对过滤得到的文件进行压缩,然后返回前端一个压缩包下载. 以下的代 ...

  3. php 3.2 生成压缩文件,并下载

    public function zip_download() { $array = array( 'http://local.qki.com/site_upload/erweima/20190826/ ...

  4. php使用ZipArchive压缩文件的心得

    $zip=new ZipArchive; if($zip->open('test.zip',ZipArchive::CREATE)===TRUE){ $zip->addFile('imag ...

  5. 利用DotNetZip服务端压缩文件并下载

    public void DownFile() {              string filePath = Server.MapPath("/Files/txt/bb.txt" ...

  6. PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩 &&搞个鸡巴毛,写少了个‘/’号,浪费了一天

    PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有 ...

  7. php压缩文件夹并下载到本地

    /** * @param $path 要压缩的文件夹路径 * @param $filename 要生成的压缩包名称 */ public function create_zip($path,$filen ...

  8. .Net类库 压缩文件 与 Ionic.Zip 批量压缩不同目录文件与解压 文件

    using System; using System.IO; using System.IO.Compression; using System.Linq; using System.Text; us ...

  9. php加密压缩文件

    前言 近几日,用爬虫采集的了一些数据,存放到硬盘中,随着数据量越来越多,所以想上传到网盘当中,可是不加下密又觉得不放心, 所以开始用PHP的zip模块进行压缩加密. 开始 $zipArc = new ...

随机推荐

  1. 【最长上升子序列】HDU 1087——Super Jumping! Jumping! Jumping!

    来源:点击打开链接 最长上升子序列的考察,是一个简单的DP问题.我们每一次求出从第一个数到当前这个数的最长上升子序列,直至遍历到最后一个数字为止,然后再取dp数组里最大的那个即为整个序列的最长上升子序 ...

  2. Druid数据库连接池使用

    转: http://lj6684.iteye.com/blog/1770093 阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好   简单使用介绍 Dru ...

  3. linux —— 学习笔记(环境变量的设置)

    目录 环境变量概要 与环境变量相关的文件 设置环境变量 注意以及相关 1.环境变量概要 环境变量,简单来说,是储存了环境信息的变量.它可以让你在不指明全部路径的情况下执行某脚本或某应用程序,比如在 l ...

  4. linux和windows同步数据 cwrsync client to rsync server

    linux和windows同步数据,rsync server  cwrsync client linux server一般系统都自带rsync,如果没有就挂载系统盘自己安装一下,安装挺简单的不用我再多 ...

  5. [ES6] Array.find()

    Convenient method to find one item in an array, avoid writing and  for + if: let arys = [1,,5,,6] ; ...

  6. PHP数据结构预热:PHP的迭代器(转)

    迭代器有时又称光标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如list或vector)上遍访的接口,设计人员无需关心容器物件的内容. 各种语言实作Iterator的 ...

  7. spring定时器任务多任务串行执行问题排查

    最近发现个生产问题,定时器任务某些任务没有及时执行.经过研究排查发现spring 定时器任务scheduled-tasks默认配置是单线程串行执行的,这就造成了若某个任务执行时间过长,其他任务一直在排 ...

  8. python实现登录函数,比较简单

    一个简单的python实现登录以及修改密码的函数 #密码错误3次,锁定登录: password_list = ['] def account_login(): Tries = 3 while Trie ...

  9. ajax请求aspx页面

    首先,这么用是不好的.最好用ashx,但也难免遇到这种需求.开发过这么一个系统,每天访问量最多100,web服务器压力很小,完全大马拉小车,主要压力都在数据库服务器上,要做大量的统计.所以页面直接全上 ...

  10. C#操作word封装

    在项目中添加Microsoft.Office.Interop.Word.dll引用 Codepublic  class  WordAPI{    private object _template;   ...