zoukankan      html  css  js  c++  java
  • php打包下载文件

    使用前请先开启:查看下php.ini里面的extension=php_zip.dll前面的分号有没有去掉;

            $zip=new ipArchive();
            $zifile = 'download/' . $bookid . '.zip';//压缩包名字
            if($zip->open($zifile, ipArchive::OVERWRITE)=== TRUE){
                $this->addFileToZip('download/'.$bookname, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
                $zip->close(); //关闭处理的zip文件
            }
    
    
    //添加文件方法
        function addFileToZip($path,$zip){
            //echo $path;
            $handler=opendir($path); //打开当前文件夹由$path指定。
            while(($filename=readdir($handler))!==false){
                //var_dump($filename);continue;
                if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’,不要对他们进行操作
                    if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
                        $this->addFileToZip($path."/".$filename, $zip);
                    }else{ //将文件加入zip对象
                        //echo $path."/".$filename.'<br>';
                        $a=substr($path."/".$filename,strlen('download/'));
                        //$zip->addFile($path."/".$filename);
                        $zip->addFile($path."/".$filename,$a);
                    }
                }
            }
            @closedir($path);
        }

    下载文件

    $this->download ($zifile,' '.$bookname . '.zip');
    
        /**
         * 可以指定下载显示的文件名,并自动发送相应的Header信息
         * 如果指定了content参数,则下载该参数的内容
         * @static
         * @access protected
         * @param string $filename 下载文件名
         * @param string $showname 下载显示的文件名
         * @param integer $expire  下载内容浏览器缓存时间
         * @return void
         * @throws ThinkExecption
         */
        protected  function download ($filename, $showname='',$expire=180) {
            if(file_exists($filename)){
                $length = filesize($filename);
            }elseif(is_file(UPLOAD_PATH.$filename)){
                $filename = UPLOAD_PATH.$filename;
                $length = filesize($filename);
            }else {
                throw_exception($filename.L('下载文件不存在!'));
            }
            if(empty($showname)){
                $showname = $filename;
            }
            $showname = basename($showname);
            if(empty($filename)){
                $type = mime_content_type($filename);
            }else{
                $type = "application/octet-stream";
            }
            ob_end_clean();
            //发送Http Header信息 开始下载
            header("content-type:text/html; charset=utf-8");
            header("Pragma: public");
            header("Cache-control: max-age=".$expire);
            //header('Cache-Control: no-store, no-cache, must-revalidate');
            header("Expires: " . gmdate("D, d M Y H:i:s",time()+$expire) . "GMT");
            header("Last-Modified: " . gmdate("D, d M Y H:i:s",time()) . "GMT");
            //下面一行就是改动的地方,即用iconv("UTF-8","GB2312//TRANSLIT",$showname)系统函数转换编码为gb2312
            header("Content-Disposition: attachment; filename=". iconv("UTF-8","gb2312",$showname));
            header("Content-Length: ".$length);
            header("Content-type: ".$type);
            header('Content-Encoding: none');
            header("Content-Transfer-Encoding: binary" );
            ob_clean();
            readfile($filename);
            //exit();
        }  
  • 相关阅读:
    vim字符串替换命令
    Android中View的事件分发机制——Android开发艺术探索笔记
    jQuery源代码框架思路
    C指针——C语言手记
    Python基础二--基本控制语句
    C++中的链式操作
    求一个字串中最长的连续字符串
    C# -- 推断字符能否转化为整形
    Loadrunner检查点使用总结
    LoadRunner设置检查点的几种方法介绍
  • 原文地址:https://www.cnblogs.com/blueskycc/p/4828173.html
Copyright © 2011-2022 走看看