这篇文章主要介绍Thinkphp6利用ZipArchive打包下载文件的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
- <李>基础环境
- <李>系统环境:Windows10 x64李> <李> PHP集成环境:phpstudy李> <>李PHP依赖管理工具:作曲家李> <>李手册:Thinkphp李>
<强>(一)下载tp6框架强>
作曲家创建项目topthink/认为tp6
<强>(二)打包下载类强>
& lt; ? php 名称空间Jrk; 类Zipdown {/* * *打包压缩文件及文件夹 * * @Author Hhy & lt; jackhhy520@qq.com> * @DateTime 2020-07-10 13:20:06 * @param数组$文件 * @param字符串$ zipName压缩包名称 * @param布尔温美元 * @param布尔isDown美元 * @return无效 */公共函数zip_file(文件=[],美元zipName=& # 39; & # 39;,温家宝=true,美元美元isDown=true) { $ zip_file_path=& # 39; zip/& # 39;;//文件名为空则生成文件名 如果(空(zipName美元)){ zipName=zip_file_path.date美元(& # 39;YmdHis& # 39;)。& # 39;. zip # 39;; 其他}{ zipName=zip_file_path美元。美元zipName强生# 39;. zip # 39;; }//实例化类,使用本类,linux需开启zlib,窗户需取消php_zip.dll前的注释 $ zip=新\ ZipArchive;/* *通过ZipArchive的对象处理zip文件 * $ zip→打开这个方法如果对邮政文件对象操作成功,$ zip→打开这个方法会返回现实 * $ zip→打开这个方法第一个参数表示处理的zip文件名。 *这里重点说下第二个参数,它表示处理模式 * ZipArchive::覆盖总是以一个新的压缩包开始,此模式下如果已经存在则会被覆盖。 * ZipArchive::覆盖不会新建,只有当前存在这个压缩包的时候,它才有效 * */如果($ zip→打开(zipName美元\ ZIPARCHIVE::覆盖| \ ZIPARCHIVE::创建)!==true) { 退出(& # 39;无法打开文件,或者文件创建失败& # 39;); }//文件夹打包处理 如果(is_string(文件)美元){//文件夹整体打包 $ this→addFileToZip(文件、邮政美元); 其他}{//文件打包 foreach(文件val美元){ 如果(file_exists(应用程序()→getRootPath()强生# 39;公共# 39;。美元val [& # 39; att_dir& # 39;])) { 如果温($){//根据存储的文件夹打包分层 $ zip→addFile(应用程序()→getRootPath()强生# 39;公共# 39;。美元val [& # 39; att_dir& # 39;], iconv (& # 39; utf - 8 # 39; & # 39; gbk # 39;, val美元[& # 39;img_dir& # 39;] # 39;公司/& # 39;。美元val[& # 39;名字# 39;])); 其他}{//不分层 $ zip→addFile(应用程序()→getRootPath()强生# 39;公共# 39;。美元val [& # 39; att_dir& # 39;], iconv (& # 39; utf - 8 # 39; & # 39; gbk # 39;, val美元[& # 39;名字# 39;])); } } } }//关闭 $ zip→close ();//验证文件是否存在 如果(! file_exists (zipName美元)){ 退出(“文件不存在“); } 如果(isDown美元){//ob_clean ();//下载压缩包 标题(“cache - control: public"); 标题(“内容描述:文件Transfer"); 头(& # 39;附加项:附件;文件名=& # 39;。basename (zipName美元));//文件名 标题(“内容类型:应用程序/zip");//zip格式的 标题(“Content-Transfer-Encoding: binary");//告诉浏览器,这是二进制文件 头(& # 39;内容长度:& # 39;。文件大小(zipName美元));//告诉浏览器,文件大小 @readfile ($ zipName);//ob_end_clean (); @unlink(应用程序()→getRootPath()强生# 39;公共/& # 39;zipName美元);//删除压缩包 其他}{//直接返回压缩包地址 返回zipName美元; } }/* * *添加文件至压缩包 * @Author Hhy & lt; jackhhy520@qq.com> * @DateTime 2020-07-10 13:20:26 * @param[型]美元路径 * @param[型]$ zip * @return无效 */公共函数addFileToZip(路径,zip美元) {//打开文件夹 处理程序=美元opendir($路径); 而(($ filename=readdir(处理器)美元)!==false) { if ($ filename !=?”,,美元文件名!=? .“){//编码转换 $ filename=iconv (& # 39; gb2312 # 39;, & # 39; utf - 8 # 39;, $ filename);//文件夹文件名字为& # 39;强生# 39;和“. .”,不要对他们进行操作 如果美元(is_dir(路径。“/?。$ filename)) {//如果读取的某个对象是文件夹,则递归 $ this→addFileToZip($路径。“/?。文件名,zip美元); 其他}{//将文件加入邮政对象 file_path=美元路径。“/?。美元的文件名; $ zip→addFile (file_path美元,basename (file_path美元)); } } }//关闭文件夹 @closedir(路径); }/* * *压缩文件解压 * * @Author Hhy & lt; jackhhy520@qq.com> * @DateTime 2020-07-10 13:23:11 * @param[型]美元文件 * @param[型]目录名 * @return无效 */公共函数unzip_file(文件,目录名美元) { 如果(! file_exists(文件)美元){ 返回错误; }//zip实例化对象 美元zipArc=new \ ZipArchive ();//打开文件 如果(! $ zipArc→打开(文件)美元){ 返回错误; }//解压文件 如果(! $ zipArc→extractTo(目录名)美元){//关闭 美元zipArc→close (); 返回错误; } 返回$ zipArc→close (); } }Thinkphp6利用ZipArchive打包下载文件的方法