php多文件打包下载
publicfunctiondownload(){//接收传递进来的参数$post=request()-˃param();
public function download()
{
//接收传递进来的参数
$post = request()->param();
$info = $this->model->alias('b')->field('b.*,u.nickname,a.name,u.mobile,a.type')->join('User u', 'b.user_id=u.id', 'left')->join('Association a', 'b.activity_id=a.id', 'left')->where(['b.id' => $post['ids']])->find();
//判断类型
$yxgc = [
$info['yxgc_01_file'],
$info['yxgc_02_file'],
$info['yxgc_03_file'],
$info['yxgc_04_file'],
$info['yxgc_05_file'],
$info['yxgc_06_file'],
$info['yxgc_07_file'],
];
$kjjb = [
$info['kjjb_01_file'],
$info['kjjb_02_file'],
$info['kjjb_03_file'],
$info['kjjb_04_file'],
$info['kjjb_05_file'],
$info['kjjb_06_file'],
$info['kjjb_07_file'],
$info['kjjb_08_file'],
];
$sjdw = [
$info['sjdw_01_file'],
$info['sjdw_02_file'],
$info['sjdw_03_file'],
$info['sjdw_04_file'],
$info['sjdw_05_file'],
$info['sjdw_06_file'],
$info['sjdw_07_file'],
$info['sjdw_08_file'],
$info['sjdw_09_file'],
$info['sjdw_10_file'],
];
$sqqy = [
$info['sqqy_01_file'],
$info['sqqy_02_file'],
$info['sqqy_03_file'],
$info['sqqy_04_file'],
$info['sqqy_05_file'],
$info['sqqy_06_file'],
$info['sqqy_07_file'],
];
$files = explode(',', trim($info['files'], ","));
$type='';
switch ($info['type']) {
case '1':
$files = array_merge($files, $kjjb);
$type='kjjb';
break;//科技进步
case '2':
$files = array_merge($files, $yxgc);
$type='yxgc';
break;//优秀工程
case '3':
$files = array_merge($files, $sjdw);
$type='sjdw';
break;//十佳单位
case '4':
$files = array_merge($files, $sqqy);
$type='sqqy';
break;//十佳企业
}
$fileList = array();
foreach ($files as $k => $v) {
if (!$v) {
continue;
}
//正则匹配是否为全路径
$file=preg_match('[http://|https://]', $v)?$v:dirname(dirname(dirname(__DIR__))) . '/public' . $v;
if ($k==0) {
$fileArr = ['real_name' => '文件', 'resume_file' => $file];
}else {
$name=$type.'_'.sprintf('%02d',$k).'_file';
$fileArr = ['real_name' => __($name), 'resume_file' => $file];
}
//查询信息
$fileData = file_get_contents($fileArr['resume_file']);
if ($fileData) {
//存储信息
$fileList[] = $fileArr;
}
}
//定义临时zip文件
$filename = time().'.zip';
//new PHP类库的zip压缩类
$zip = new \ZipArchive();
//打开文件
$zip->open($filename, \ZipArchive::CREATE | \ZipArchive::OVERWRITE | \ZipArchive::CM_STORE);
//循环信息数组
foreach ($fileList as $key => $vo) {
//分割文件路径,获取后缀名
$fileArrHz = explode('.', $vo['resume_file']);
//获取数组最后一个参数,后缀名
$type = $fileArrHz[count($fileArrHz) - 1];
//获取文件内容
$fileData = file_get_contents($vo['resume_file']);
//判断信息是否存在
if ($fileData) {
//将文件重新定义名称,用户名 + 后缀名
$zip->addFromString($vo['real_name'] . '.' . $type, $fileData);
}
}
//关闭zip类
$zip->close();
//打开临时压缩包
$file = fopen($filename, "r");
$filename1 = $info['name'] . '_' . $info['mobile'] . "_" . date('Y年m月d日h时i分s秒') . ".zip";
//定义header头信息
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: " . filesize($filename));
Header("Content-Disposition: attachment; filename=" . $filename1);
//一次只传输1024个字节的数据给客户端
$buffer = 1024; //
while (!feof($file)) {
//将文件读入内存
$file_data = fread($file, $buffer);
//每次向客户端回送1024个字节的数据
echo $file_data;
}
//关闭文件
fclose($file);
$this->success('成功');
}
相关文章
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~