ThinkPHP动态生成zip压缩包文件并下载的解决方案
发表于:2023-08-08 18:17:05浏览:1617次
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, "找不到相关附件");
}
}
实际效果:
推荐文章
- 原生js和jquery方式获取浏览器的各种高度和宽度(页面width和height)
- 使用HTML Purifier在thinkphp6中过滤富文本&防止XSS攻击
- ThinkPHP6的中间件讲解及路由配置
- Thinkphp6获取请求的模块名、类名和方法名的方式
- linux环境下,Composer安装项目时报错:Do not run Composer as root/super user!
- PHP根据昵称或者姓名自动生成文字头像(图片)的方法
- 推荐五款优秀的SpringCloud开源脚手架项目
- 前端开发者必须掌握的数据可视化技术
- 码云(gitee)配置git禁止直接提交到master分支的方法
- Vue又出新品——petite-vue