php实现文件的打包批量下载
需求:管理员上传一个产品的N个检测报告。这货没有打包而是把十几个报告文件一个一个上传到服务器。
客户下载自己产品的报告,要点击N个链接来下载所有的报告。
为了客户体验,添加批量下载功能,将管理员上传的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("文件不存在");
}
}