ThinkPHP动态生成zip压缩包文件并下载的解决方案
发表于:2023-08-08 18:17:05浏览:2036次
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, "找不到相关附件");
}
}
实际效果:
推荐文章
- CSS 选择器::is(), :where(), 和:has()伪元素的运用
- Markdown编辑器Editor.md,实现粘贴图片上传,拖拽文件上传
- thinkphp6 生成Barcode条形码和Qrcode二维码的方法
- 82个常规的前端JavaScript方法封装(51~60)
- Layui的upload模块实现多图批量上传,无需修改代码,完美解决方案
- Layui的table模块导出所有数据,无需修改代码,完美解决方案
- javasript两个数组元素分别相加
- Vite 3.0 发布,下一代的前端工具链
- 十款好用到爆的 MySQL 可视化管理工具推荐
- ThinkPHP5/6 查询并进行数据计算的快捷方法

