PHP 文件打包并下载
有个这样的需求,将多个文件打包成zip格式并下载到本地
可根据 ZipArchive这个类来实现此功能
我自己也研究了一下,然后把搞出来了 ,经测试绝对好用
话不多说直接上代码
$params = $_REQUEST; //获取前端form表单传过来的选中文件的id
if(empty($params['files'])){
echo "<script>alert(\"下载数据不能为空\");history.go(-1);</script>";exit;
}
$id = $params['files'];//文件id
foreach($id as $k => $v){
$arr[] = DB::table('GoodsFile')->where('id',$v)->field('files,files_name')->select();
foreach($arr as $key=>$val){
$arr1[$key] = $val[0];
}
}
foreach($arr1 as $k=>$v){
$file_name[] = ($v['files_name']);// 文件名称
$filepath=iconv("utf-8","gb2312",$v['files']);
$file_path[]=$_SERVER['DOCUMENT_ROOT'].'/'.$filepath; //使用绝对路径
}
$time = time();
$filetime = date('YmdHis', $time);
$file_url = $_SERVER['DOCUMENT_ROOT']."/static/upload/zip/"."下载文件".$filetime.".zip"; // 压缩包所在的位置路径
$zip = new ZipArchive();
$zip->open($file_url, ZipArchive::CREATE); //打开压缩包
foreach ($file_path as $file) {
$zip->addFile($file, basename($file)); //向压缩包中添加文件
}
$rs = $zip->close(); //关闭压缩包
//打开文件---先判断再操作
if(!file_exists($file_url)){
echo "文件不存在";
return ; //直接退出
}
//这里是输出下载;
header("Cache-Control:max-age=0");
header("Content-Description:FileTransfer");
header('Content-disposition:attachment;filename='.basename($file_url));//文件名
header("Content-Type:application/zip");//zip格式的
header("Content-Transfer-Encoding:binary");//告诉浏览器,这是二进制文件
header('Content-Length:'.filesize($file_url));//告诉浏览器,文件大小
@readfile($file_url);//输出文件;