当前位置: 首页 > news >正文

PHP压缩打包,下载目录或者文件,解压zip文件

函数

    /*** 压缩整个文件夹为zip文件* 本地需要绝对路径,服务器需要相对路径*/function makeZipFile($zip_path = '', $folder_path = '') {$rootPath = realpath($folder_path);$zip = new ZipArchive();
//        $zip->open($zip_path, ZipArchive::CREATE | ZipArchive::OVERWRITE);//这是压缩文件夹里面的文件$zip->open($zip_path, ZipArchive::CREATE);//这是压缩目录$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($rootPath),RecursiveIteratorIterator::LEAVES_ONLY);foreach ($files as $name => $file){if (!$file->isDir()){$filePath = $file->getRealPath();$relativePath = substr($filePath, strlen($rootPath) + 1);$zip->addFile($filePath, $relativePath);}}$zip->close();}

 应用方法

        //为了避免下载混乱,这里说了一个下载记录的,以下是以下载记录ID来区分,每次压缩的内容$downloadsID = 下载记录的ID;//下载地址$ExcelTmpDir = '压缩的主要目录地址';$isCompress = 0;//是否需要压缩,1=需要:用户判断最后是否需要进压缩打包$dataArr = array();//需要压缩的文件路径数据//循环数据,创建对应的目录,以及复制对应的图片文件到需要的目录里面foreach ($dataArr as $item){//目录名称$dirThemeName = '目录名称';//先创建对应的目录if(!is_dir($ExcelTmpDir.'/'.$downloadsID.'/'.$dirThemeName)){$ret=mkdir($ExcelTmpDir.'/'.$downloadsID.'/'.$dirThemeName,0755,true);if(!$ret)die('directory create faild!');}//再复制数据if (这里可以判断文件是否存在等,根据自己的业务来判断){$isCompress = 1;$imgArr = array(文件路径数组);//本地为绝对路径,服务器为相对路径foreach ($imgArr as $img){$imgName = '';//获取文件名称copy(substr($img,1),$ExcelTmpDir.'/'.$downloadsID.'/'.$dirThemeName.'/'.$imgName);//复制}}}//最后压缩打包if ($isCompress){//压缩文件路径$zip_file = $ExcelTmpDir.'/'.$downloadsID.'/'.date('YmdHis').'.zip';//需要压缩的文件夹路径$zip_dir = $ExcelTmpDir.'/'.$downloadsID;makeZipFile($zip_file,$zip_dir);header("Location: /".$zip_file);}

js下载

window.location = '压缩打包的应用方法接口地址'

以上为压缩打包并下载的整个流程,仅供参考学习。

 解压

$zip = new ZipArchive();
$zipName = '压缩包路径及名称';
$extractPath = '解压到的目录';if ($zip->open($zipName) === TRUE) {// 解压ZIP文件$zip->extractTo($extractPath);// 关闭ZIP文件$zip->close();echo '成功';
} else {echo '失败';
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【27】23种设计模式
  • UGUI跟随鼠标
  • 基于python的百度迁徙迁入、迁出数据分析(三)
  • DOS攻击实验
  • 语音合成大模型汇总
  • Linux 4: Bash
  • 大模型学习笔记十四:Agent模型微调
  • Ubuntu20.04 设置静态ip
  • AI驱动的城市治理:露天商贩监测识别技术在街道安全管理中的应用
  • 主要的软件设计模式及其在Kotlin中的实现示例
  • 1480. 找字典码最小的字符串
  • 基于微信小程序的数字社区管理系统
  • 科学设计程序员面试内容,破解“八股文”之弊
  • 《计算机网络》(第8版)第八章 互联网上的音频/视频服务 复习笔记
  • 【数据结构】队列(链表实现 + 力扣 + 详解 + 数组实现循环队列 )
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Angular2开发踩坑系列-生产环境编译
  • Apache的80端口被占用以及访问时报错403
  • HashMap ConcurrentHashMap
  • idea + plantuml 画流程图
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JavaScript创建对象的四种方式
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • java中具有继承关系的类及其对象初始化顺序
  • Mybatis初体验
  • mysql_config not found
  • Nacos系列:Nacos的Java SDK使用
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • PHP变量
  • Spring框架之我见(三)——IOC、AOP
  • Webpack 4x 之路 ( 四 )
  • 初识 webpack
  • 聚簇索引和非聚簇索引
  • 前端之Sass/Scss实战笔记
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 微信小程序填坑清单
  • 译自由幺半群
  • zabbix3.2监控linux磁盘IO
  • 昨天1024程序员节,我故意写了个死循环~
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ![CDATA[ ]] 是什么东东
  • #QT(TCP网络编程-服务端)
  • (04)odoo视图操作
  • (160)时序收敛--->(10)时序收敛十
  • (arch)linux 转换文件编码格式
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四) 虚拟摄像头vivi体验
  • (未解决)macOS matplotlib 中文是方框
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决