首页 > 教程 >
Thinkphp6如何利用ZipArchive打包下载文件
2023-02-17教程围观次
简介下面给大家介绍Thinkphp6利用ZipArchive打包下载文件的方法,希望对需要的朋友有所帮助!基础环境系统环境:Windows10x64PHP集成环境:phpstudyPHP依赖管理工具:Composer手册:Thinkphp(一)下载tp6框架composercreate-projecttopthink/thinktp6(二)打包下载类
下面给大家介绍 Thinkphp6利用 ZipArchive 打包 下载文件的方法,希望对需要的朋友有所帮助!
基础环境
系统环境:Windows10 x64
PHP集成环境:phpstudy
PHP依赖管理工具:Composer
手册:Thinkphp
(一)下载tp6框架
composer create-project topthink/think tp6
(二)打包下载类
<?phpnamespace Jrk;class Zipdown{ /** * 打包压缩文件及文件夹 * * @Author Hhy <jackhhy520@qq.com> * @DateTime 2020-07-10 13:20:06 * @param array $files * @param string $zipName 压缩包名称 * @param boolean $wen * @param boolean $isDown * @return void **/ public function zip_file($files = [], $zipName = '', $wen = true,$isDown = true){ $zip_file_path='zip/'; // 文件名为空则生成文件名 if (empty($zipName)) { $zipName = $zip_file_path.date('YmdHis') . '.zip'; }else{ $zipName=$zip_file_path.$zipName.'.zip'; } // 实例化类,使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释 $zip = new ZipArchive; /* * 通过ZipArchive的对象处理zip文件 * $zip->open这个方法如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE * $zip->open这个方法第一个参数表示处理的zip文件名。 * 这里重点说下第二个参数,它表示处理模式 * ZipArchive::OVERWRITE 总是以一个新的压缩包开始,此模式下如果已经存在则会被覆盖。 * ZipArchive::OVERWRITE 不会新建,只有当前存在这个压缩包的时候,它才有效 * */ if ($zip->open($zipName, ZIPARCHIVE::OVERWRITE | ZIPARCHIVE::CREATE) !== true) { exit('无法打开文件,或者文件创建失败'); } // 文件夹打包处理 if (is_string($files)) { // 文件夹整体打包 $this->addFileToZip($files, $zip); } else { // 文件打包 foreach ($files as $val) { if(file_exists(app()->getRootPath().'public'.$val['att_dir'])){ if($wen){ //根据存储的文件夹打包分层 $zip->addFile(app()->getRootPath().'public'.$val['att_dir'], iconv('UTF-8','gbk',$val['img_dir'].'/'.$val['name'])); }else{ //不分层 $zip->addFile(app()->getRootPath().'public'.$val['att_dir'], iconv('UTF-8','gbk',$val['name'])); } } } } // 关闭 $zip->close(); // 验证文件是否存在 if (!file_exists($zipName)) { exit("文件不存在"); } if ($isDown) { // ob_clean(); // 下载压缩包 header("Cache-Control: public"); header("Content-De ion: File Transfer"); header('Content-disposition: attachment; filename=' . name($zipName)); //文件名 header("Content-Type: application/zip"); //zip格式的 header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件 header('Content-Length: ' . filesize($zipName)); //告诉浏览器,文件大小 @readfile($zipName);//ob_end_clean(); @un (app()->getRootPath().'public/'.$zipName);//删除压缩包 } else { // 直接返回压缩包地址 return $zipName; } } /** * 添加文件至压缩包 * @Author Hhy <jackhhy520@qq.com> * @DateTime 2020-07-10 13:20:26 * @param [type] $path * @param [type] $zip * @return void */ public function addFileToZip($path, $zip) { // 打开文件夹 $handler = opendir($path); while (($filename = readdir($handler)) !== false) { if ($filename != "." && $filename != "..") { // 编码转换 $filename = iconv('gb2312', 'utf-8', $filename); // 文件夹文件名字为'.'和‘..’,不要对他们进行操作 if (is_dir($path . "/" . $filename)) { // 如果读取的某个对象是文件夹,则递归 $this->addFileToZip($path . "/" . $filename, $zip); } else { // 将文件加入zip对象 $file_path = $path . "/" . $filename; $zip->addFile($file_path, name($file_path)); } } } // 关闭文件夹 @closedir($path); } /** * 压缩文件解压 * * @Author Hhy <jackhhy520@qq.com> * @DateTime 2020-07-10 13:23:11 * @param [type] $file * @param [type] $dirname * @return void */ public function unzip_file($file, $dirname) { if (!file_exists($file)) { return false; } // zip实例化对象 $zipArc = new ZipArchive(); // 打开文件 if (!$zipArc->open($file)) { return false; } // 解压文件 if (!$zipArc->extractTo($dirname)) { // 关闭 $zipArc->close(); return false; } return $zipArc->close(); }}
(三)使用,亲测有效
/** * @author: Hhy <jackhhy520@qq.com> * @date: 2020/7/2 0002 * @describe:打包下载 */public function download(){ $id= $this->request->param("id"); if (is_array($id)){ $ids=$id; }else{ $ids=@explode(",",$id); } $data=$this->model->where('id', 'in',$ids)->select()->toArray(); //dd($data); if (empty($data)) { $this->error("暂无数据"); } $zip=new JrkZipdown(); //打包下载 $zip->zip_file($data);}
下载链接:网站源码/小程序源码/网站模板下载
下载排行
- Thinkphp会议室预约系统源码
- PHP抽奖小程序/微信红包封面抽奖小程序/抽奖小程序开源源码
- 微信小程序格创校园跑腿小程序源码v1.1.64+前端
- 个人支付宝收款页面,对接当面付接口
- 最新仿720云全景制作源码|krpano仿720云全景网站源码
- efucms小说漫画分销系统源码E16 2019最新项目瑞企小说漫画系统公众号小说分销强制关注听书分销全开源无加密
- 全新UI基于Thinkphp的最新自助打印系统/云打印小程序源码/附教程
- Uniapp壁纸小程序源码/双端微信抖音小程序源码
- 最新简约轻量版H5手机微商城运营源码/对接最新Z支付个人免签接口
- 推券客CMS淘宝优惠券网站源码淘宝客优惠券推广网站系统完整版源码
最新发布
-
最新去水印小程序源码分享/无需后台/对接接口/支持全网去水印功能
-
群多多社群人脉H5-2.1.4多开插件+小程序独立前端+搭建教程
-
七夕情侣飞行棋游戏限定版本源码/解锁版
-
苹果CMS海螺模版V20修复版/加广告代码
-
宠物社区风格 商业版(GBK)Discuz模板
-
全新UI基于Thinkphp的最新自助打印系统/云打印小程序源码/附教程
-
易优CMS家纺家居装饰类网站模板/EyouCMS家具家居类企业网站模板
-
EyouCMS艺术***摄影工作室网站模板/易优CMS摄影工作室网站模板
-
易优CMS响应式精品茶具实木茶盘销售网站模板/EyouCMS响应式酒水饮料类企业网站模板
-
EyouCMS响应式推土机挖掘机机械类网站模板/易优CMS机械设备类企业网站模板