实现的是一个选中批量打包下载功能:提交完之后直接浏览器下载。开发框架:thinkphp5或3
//最终生成的文件名(含路径)
$filename = $zipname.".zip";
foreach ($exported as $ke => $ve){
$zip = new \ZipArchive();//特别注意:在框架中由于命名空间的问题,导致不能直接使用$zip = new ZipArchive();
if ($zip->open($filename, \ZipArchive::CREATE)!==TRUE) {
exit('无法打开文件,或者文件创建失败');
}
if(file_exists($ve)){
//特别注意:打包的时候存在将服务器整个文件夹路径全部打包进去导致不好的体验,解决办法如下
$zip->addFile($ve,iconv('utf-8', 'gbk', basename($ve)));
}
$zip->close();//关闭
}
if(!file_exists($filename)){
exit("无法找到文件"); //即使创建,仍有可能失败。。。。
}
header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename='.basename($filename)); //文件名
header("Content-Type: application/zip"); //zip格式的
header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
header('Content-Length: '. filesize($filename)); //告诉浏览器,文件大小
@readfile($filename);