ThinkPHP动态生成zip压缩包文件并下载的解决方案
发表于:2023-08-08 18:17:05浏览:1945次
PHP ZipArchive是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP的ZIP扩展已经开启,这里整理个很普通的动态生成zip压缩包文件并下载的示例供参考。
需求:
提供N个文件的路径,文件再打包前需要重新命名,将文件打包压缩成zip文件,并下载。
解决:
无需要下载任何插件,测试环境本地Ngnix和云主机均可。
代码:
访问zip_down方法,需要注意需要打包的文件,也就是$fileArray数组中的路径需要真实的物理路径,比如:
D:\wwwroot\gouguoa\public\public\storage\202308\aaaaa.jpg
具体代码如下:
//打包文件
public function create_zip($pathArr,$zipName){
$zip = new \ZipArchive();
if($zip->open($zipName,\ZipArchive::CREATE|\ZipArchive::OVERWRITE)){
foreach($pathArr as $file){
$path = CMS_ROOT."public".$file['filepath'];
if(!file_exists($path)){
continue;
}
$zip->addFile($path,$file['name']); //向压缩包中添加文件
}
$zip->close();
return ['code'=>0,'info'=>"创建成功",'path'=>$zipName];
}else{
return ['code'=>1,'info'=>'创建失败'];
}
}
//下载文件
public function zip_down()
{
$fileArray = [
["name" => "11.png","filepath" => "/storage/202308/0b62e66de379ef4014532b3c7bcbfc38.png"],
["name" => "001需求.doc","filepath" => "/storage/202308/34ee09861db8208387812d5.doc" ],
["name" => "2903453064-副本.mp4","filepath" =>"/storage/202308/bd4b515310447cdb7029f64f.mp4"]
];
//生成压缩文件名
$fileName = '我是新的压缩包.zip';
//前面的读取真实的物理路径
$zipName = CMS_ROOT."public".'/storage/zip/'.$fileName;
$res = $this->create_zip($fileArray,$zipName);
//halt($res);
if($res['code']==0){
$fileUrl = $res['path'];
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
readfile($fileUrl);
//下载完成后删除文件
@unlink($fileUrl);
exit;
}
else{
return to_assign(1, "操作失败");
}
}
else{
return to_assign(1, "找不到相关附件");
}
}
实际效果:
推荐文章
- 开源免费的企业办公系统,勾股OA2.0发布
- 8个项目必备的JavaScript代码片段,建议加入到项目中
- thinphp6如何自定义修改报错页面
- ThinkPHP发布安全更新版本(V6.1.0/V6.0.14),移除对think-filesystem库的依赖
- thinkphp6 leftjoin联表查询时,子表有多条记录去重后获取子表的最新记录查询方法
- CSS 选择器::is(), :where(), 和:has()伪元素的运用
- TinyMCE是一个轻量、简洁、功能强大的富文本编辑器
- javascript对字符串的切割截取方法集合
- Thinkphp6使用mPdf实现生成pdf文件
- phpword 使用TemplateProcessor方式实现在word模板中动态插入表格

