转: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 );  //下载完成后要主动删除   
}

转载于:https://www.cnblogs.com/guoyongrong/p/3877733.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值