1. 需求:管理员上传一个产品的N个检测报告。这货没有打包而是把十几个报告文件一个一个上传到服务器。

  2. 客户下载自己产品的报告,要点击N个链接来下载所有的报告。

  3. 为了客户体验,添加批量下载功能,将管理员上传的N个报告打包,让客户一键下载。

    使用php自带的ZipArchive函数即可,下面结合Thinkphp实现打包下载。

public functionreport_zip(){
   $order_id= I("order_id/d");
   $order= M("Order")->find($order_id);
   $filename="./upload/report_zip/{$order['order_num']}.zip";//最终生成的文件名(含路径)
   if(!file_exists($filename)) {//重新生成文件
       $zip=new\ZipArchive();
       if($zip->open($filename, \ZIPARCHIVE::CREATE) !==TRUE) {
           exit('无法打开文件,或者文件创建失败');
       }
       $datalist=explode(",",$order['report_files']);
       //$datalist = array('index.php', 'readme.md');
       foreach($datalistas$val) {
           $val="./upload/".$val;
           if(file_exists($val)) {
               $zip->addFile($val);
           }
       }
       $zip->close();//关闭
   }
   $this->download_zip($filename);
}
private functiondownload_zip($filename){
   if(file_exists($filename)) {
       $http=newHttp();
       $http->download($filename);
   }else{
       $this->error("文件不存在");
   }
}