Thinkphp6如何利用ZipArchive打包下载文件

下面给大家介绍Thinkphp6利用ZipArchive打包下载文件的方法,希望对需要的朋友有所帮助! 基础环境 系统环境:Windows10 x64 PHP集成环境:phpstu…

下面给大家介绍Thinkphp6利用ZipArchive打包下载文件的方法,希望对需要的朋友有所帮助!

基础环境

系统环境:Windows10 x64

PHP集成环境:phpstudy

PHP依赖管理工具:Composer

手册:Thinkphp

(一)下载tp6框架

composercreate-projecttopthink/thinktp6(二)打包下载类

<?phpnamespaceJrk;classZipdown{/***打包压缩文件及文件夹**@AuthorHhy<jackhhy520@qq.com>*@DateTime2020-07-1013:20:06*@paramarray$files*@paramstring$zipName压缩包名称*@paramboolean$wen*@paramboolean$isDown*@returnvoid**/publicfunctionzip_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($filesas$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-Description:FileTransfer");header('Content-disposition:attachment;filename='.basename($zipName));//文件名header("Content-Type:application/zip");//zip格式的header("Content-Transfer-Encoding:binary");//告诉浏览器,这是二进制文件header('Content-Length:'.filesize($zipName));//告诉浏览器,文件大小@readfile($zipName);//ob_end_clean();@unlink(app()->getRootPath().'public/'.$zipName);//删除压缩包}else{//直接返回压缩包地址return$zipName;}}/***添加文件至压缩包*@AuthorHhy<jackhhy520@qq.com>*@DateTime2020-07-1013:20:26*@param[type]$path*@param[type]$zip*@returnvoid*/publicfunctionaddFileToZip($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,basename($file_path));}}}//关闭文件夹@closedir($path);}/***压缩文件解压**@AuthorHhy<jackhhy520@qq.com>*@DateTime2020-07-1013:23:11*@param[type]$file*@param[type]$dirname*@returnvoid*/publicfunctionunzip_file($file,$dirname){if(!file_exists($file)){returnfalse;}//zip实例化对象$zipArc=new\\ZipArchive();//打开文件if(!$zipArc->open($file)){returnfalse;}//解压文件if(!$zipArc->extractTo($dirname)){//关闭$zipArc->close();returnfalse;}return$zipArc->close();}}(三)使用,亲测有效/***@author:Hhy<jackhhy520@qq.com>*@date:2020/7/20002*@describe:打包下载*/publicfunctiondownload(){$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=newJrk\\Zipdown();//打包下载$zip->zip_file($data);}

产品猿社区致力收录更多优质的商业产品,给服务商以及软件采购客户提供更多优质的软件产品,帮助开发者变现来实现多方共赢;

日常运营的过程中我们难免会遇到各种版权纠纷等问题,如果您在社区内发现有您的产品未经您授权而被用户提供下载或使用,您可按照我们投诉流程处理,点我投诉

本文来自用户发布投稿,不代表产品猿立场 ;若对此文有疑问或内容有严重错误,可联系平台客服反馈;

部分产品是用户投稿,可能本文没有提供官方下下载地址或教程,若您看到的内容没有下载入口,您可以在我们产品园商城搜索看开发者是否有发布商品;若您是开发者,也诚邀您入驻商城平台发布的产品,地址:点我进入

如若转载,请注明出处:https://www.chanpinyuan.cn/42755.html;
(0)
上一篇 2023年5月11日 下午4:16
下一篇 2023年5月11日

相关推荐

发表回复

登录后才能评论
分享本页
返回顶部