• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

PHP扩展类ZipArchive实现压缩Zip文件和文件打包下载

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 1 <?php
 2 /**
 3  * 关于文件压缩和下载的类
 4  * @author  tycell
 5  * @version 1.0
 6  */
 7 class zip_down{
 8 
 9     protected $file_path;
10     /**
11      * 构造函数
12      * @param [string] $path [传入文件目录]  
13      */
14     public function __construct($path){
15         $this->file_path=$path; //要打包的根目录
16     }
17     /**
18      * 入口调用函数
19      * @return [type] [以二进制流的形式返回给浏览器下载到本地]
20      */
21     public function index(){
22         $zip=new ZipArchive();
23         $end_dir=$this->file_path.date('Ymd',time()).'.zip';//定义打包后的包名
24         $dir=$this->file_path;
25         if(!is_dir($dir)){
26             mkdir($dir);
27         }
28         if($zip->open($end_dir, ZipArchive::OVERWRITE) === TRUE){ ///ZipArchive::OVERWRITE 如果文件存在则覆盖
29             $this->addFileToZip($dir, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
30             $zip->close(); 
31         }
32         if(!file_exists($end_dir)){   
33             exit("无法找到文件"); 
34         }
35         header("Cache-Control: public"); 
36         header("Content-Description: File Transfer"); 
37         header("Content-Type: application/zip"); //zip格式的   
38         header('Content-disposition: attachment; filename='.basename($end_dir)); //文件名   
39         header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件    
40         header('Content-Length:'.filesize($end_dir)); //告诉浏览器,文件大小   
41         @readfile($end_dir);
42         $this->delDirAndFile($dir,true);//删除目录和文件
43         unlink($end_dir);////删除压缩包
44     }
45     /**
46      * 文件压缩函数 需要开启php zip扩展
47      * @param [string] $path [路径]
48      * @param [object] $zip  [扩展ZipArchive类对象]
49      */
50     protected function addFileToZip($path, $zip){
51         $handler = opendir($path);
52         while (($filename=readdir($handler)) !== false) {
53             if ($filename!= "." && $filename!=".."){
54                if(!is_dir($filename)){ 
55                      $zip->addFile($path."/".$filename,$filename); //第二个参数避免将目录打包,可以不加
56                 }
59             }
60         }
61         @closedir($path);
62     }
63     /**
64      * 删除文件函数 
65      * @param  [string]  $dir    [文件目录]
66      * @param  boolean $delDir [是否删除目录]
67      * @return [type]          [description]
68      */
69     protected function delDirAndFile($path,$delDir=true){
70         $handle=opendir($path);
71         if($handle){
72             while(false!==($item = readdir($handle))){
73                 if($item!="."&&$item!=".."){
74                     if(is_dir($path.'/'.$item)){
75                         $this->delDirAndFile($path.'/'.$item, $delDir);
76                     }else{
77                         unlink($path.'/'.$item);
78                     }
79                 }
80             }
81             @closedir($handle);
82             if($delDir){return rmdir($path);}
83         }else{
84             if(file_exists($path)){
85                 return unlink($path);
86             }else{
87                 return FALSE;
88             }
89         }
90     }
91 
92 }
 

 



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
PHP实例学习之————MVC架构模式分析与设计发布时间:2022-07-10
下一篇:
user.ini可能引起PHP网站无法正常访问发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap