PHP多文件打包并下载压缩包
public function actionGetDownloadSize()
{
$hui = 317;
$zguan = '5.1';
if(empty($hui)||empty($zguan)){
$this->failReturn(204,'缺少必选参数');die;
}
$query = BoothHuiExhibition::find();
$query->select('id,guan_img');
$query->where(['hui_id'=>$hui,'exhibition_nums'=>$zguan]);
$data = $query->asArray()->all();
if(empty($data)){
$this->failReturn(204,'数据为空');die;
}
$size = 0;
foreach ($data as $k => $v){
$filename = str_replace('\\','/',dirname(dirname(dirname(__DIR__))).'/web'.$v['guan_img']);
if(file_exists($filename)){
$size += filesize($filename);
}
}
$this->successReturn($size,'获取成功');
}
public function actionRawCh()
{
$hui = 317;
$zguan = '5.1';
if(empty($hui)||empty($zguan)){
$this->failReturn(204,'缺少必选参数');die;
}
$huiInfo = HuiZhan::findOne($hui);
$query = BoothHuiExhibition::find();
$query->select('id,guan_img');
$query->where(['hui_id'=>$hui,'exhibition_nums'=>$zguan]);
$data = $query->asArray()->all();
if(empty($data)){
$this->failReturn(204,'数据为空');die;
}
$size = 0;
foreach ($data as $k => $v){
$filename = str_replace('\\','/',dirname(dirname(dirname(__DIR__))).'/web'.$v['guan_img']);
if(file_exists($filename)){
$size += filesize($filename);
}
}
if($size/1024 > 1024*200){
$this->failReturn(204,'下载资料文件过大');die;
}
$zip = new \ZipArchive();
$filename = $zguan.'展厅'.$huiInfo->hui_nickname.'设施图.zip';
$zip->open('./'.$filename,$zip::CREATE);
$empty = 0;
foreach ($data as $k => $v){
$file = str_replace('\\','/',dirname(dirname(dirname(__DIR__))).'/web'.$v['guan_img']);
if(file_exists($file)){
$fileData = file_get_contents($file);
$url = explode('/',$v['guan_img']);
$zip->addFromString(end($url), $fileData);
$empty = $empty+1;
}
}
if($empty==0){
$this->failReturn(204,'文件不存在');
}
$zip->close();
$this->successReturn($filename,'已生成压缩包');
}