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 '失败';
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用PyTorch导出JIT模型:C++ API与libtorch实战

PyTorch导出JIT模型并用C API libtorch调用 本文将介绍如何将一个 PyTorch 模型导出为 JIT 模型并用 PyTorch 的 CAPI libtorch运行这个模型。 Step1:导出模型 首先我们进行第一步,用 Python API 来导出模型,由于本文的重点是在后面的部署…

【odoo17】后端py方法触发右上角提示组件

概要 在前面文章中,有介绍过前端触发的通知服务。 【odoo】右上角的提示(通知服务) 此文章则介绍后端触发方法。 内容 直接上代码:但是前提一定是按钮触发!!!!! def bu…

【css】实现扫光特效

对于要重点突出的元素,我们经常可以看到它上面打了一个从左到右的斜向扫光,显得元素亮闪闪的!类似于下图的亮光动效 关键步骤 伪元素设置position :absolute【也可以不用伪元素,直接创建一个absolute元素盖在上面】设置渐变line…

Mike21粒子追踪模型particle tracking如何展示粒子轨迹

前言: 随着模型的推广,模型的很多模块也问的多了起来,PT粒子追踪模块最近群友也在问,结果算了出来,却实现不了展示运动轨迹。今天就写段简单的PT后处理的方法吧。 注意:MIKE21输出模块中不但输出了关于水…

Axure怎么样?全面功能评测与用户体验分析!

软件 Axure 曾经成为产品经理必备的原型设计工具,被认为是专门为产品经理设计的工具。但事实上,软件 Axure 的使用场景并不局限于产品经理构建产品原型。UI/UX 设计师还可以使用 Axure 软件构件应用程序 APP 原型,网站设计师也可以使用 Axure…

【Linux:本地模拟弱网,弱网命令】

这两个命令都使用了tc(Traffic Control)工具,它是Linux内核的一部分,用于控制网络流量的传输。这些命令模拟了弱网环境,包括丢包和延迟。 丢包 sudo tc qdisc add dev [device] root netem loss 80% 70%sudo: 以超级…

大模型学习资源

上一篇扯了一堆废话,关于大模型,提供一下建议 说实话,大模型更新太快,以我30岁的高龄实在不适合再去研究技术。偶然发现,国内的大模型厂家在做推广的培训。比如上海人工智能实验室,阿里,百度。…

Java 异常机制

一、定义 Java异常是Java编程语言中用于处理运行时错误的一种机制。当程序执行过程中遇到无法继续执行的情况时,会抛出异常。异常是Java程序中的一种特殊对象,它包含了错误发生的详细信息,如错误类型、错误描述以及错误发生的代码位置等。 …

如何系统的学习C++和自动驾驶算法

给大家分享一下我的学习C和自动驾驶算法视频,收藏订阅都很高。打开下面的链接,就可以看到所有的合集了,订阅一下,下次就能找到了。 【C面试100问】第七十四问:STL中既然有了vector为什么还需要array STL中既然有了vec…

JAVA用TreeMap实现JSON按字母升序排序

//对JSON数据按照英文字母升序排序 JSONObject jsonObject JSONObject.parseObject(data); Map<String, Object> map jsonObject.getInnerMap(); Map<String, Object> sortedMap new TreeMap<>(map); JSONObject sortedJsonObject new JSONObject(sorted…

QSqlQuery增删改查

本文记录使用QSqlQuery实现增删改查的过程。 目录 1. 构建表格数据 声明变量 表格、数据模型、选择模型三板斧设置 列表执行查询 列表的水平表头设置 2. 新增一行 构建一个空行 通过dialog返回的修改行数据&#xff0c;update更新 3. 更新一行 获取到需要更新的行 通…

Spring Bean - xml 配置文件创建对象

类型&#xff1a; 1、值类型 2、null &#xff08;标签&#xff09; 3、特殊符号 &#xff08;< -> < &#xff09; 4、CDATA <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/bea…

golang pretty-print json

# struct use MarshalIndent dataByte, err : json.MarshalIndent(v, "", " ")# str json use gjson pretty gjson.Get(task.Config, "pretty").String()

信息安全技术解析

在信息爆炸的今天&#xff0c;信息技术安全已成为社会发展的重要基石。随着网络攻击的日益复杂和隐蔽&#xff0c;保障数据安全、提升防御能力成为信息技术安全领域的核心任务。本文将从加密解密技术、安全行为分析技术和网络安全态势感知技术三个方面进行深入探讨&#xff0c;…

WPF启动失败报System.Windows.Automation.Peers.AutomationPeer.Initialize()错误解决

问题描述 win10系统上WPF程序启动后就崩溃&#xff0c;通过查看崩溃日志如下&#xff1a; 应用程序: xxx.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常&#xff0c;进程终止。 异常信息: System.TypeLoadException 在 System.Windows.Automation.Peers.Automatio…

C++中的万能引用,引用折叠,完美转发

文章目录 前提万能引用为什么需要万能引用 引用折叠完美转发std::forward基本用法 参考链接 前提 在看别人写的一些库时&#xff0c;总是会碰见万能引用&#xff0c;引用折叠&#xff0c;完美转发这几个概念&#xff0c;这次对它们做一个详细的整理。 万能引用 万能引用 是一…

leetcode-105. 从前序与中序遍历序列构造二叉树

题目描述 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,nu…

重塑生态体系 深挖应用场景 萤石诠释AI时代智慧生活新图景

7月24日&#xff0c;“智动新生&#xff0c;尽在掌控”2024萤石夏季新品发布会在杭州举办。来自全国各地的萤石合作伙伴、行业从业者及相关媒体&#xff0c;共聚杭州&#xff0c;共同见证拥抱AI的萤石&#xff0c;将如何全新升级&#xff0c;AI加持下的智慧生活又有何不同。 发…

【WinDbg读取蓝屏的dmp日志】iaStorAC.sys 蓝屏解决

读取蓝屏日志&#xff1a; Window偶尔一次蓝屏不用管。 经常蓝屏重置或重装系统。 想要知道为什么蓝屏&#xff0c;通过WinDbg查看蓝屏日志。 蓝屏日志查找和配置 1&#xff0c;蓝屏那一刻拍照蓝屏的界面&#xff0c;即可知道基本的蓝屏信息。 2&#xff0c;蓝屏日志的配置…

从0开始搭建vue + flask 旅游景点数据分析系统(一):创建前端项目

根据前面的爬虫课程&#xff0c;我们重新开一个坑&#xff0c;就是基于爬取到的数据&#xff0c;搭建一个vueflask的前后端分离的数据分析系统 1 通过这个系列教程可以学习到什么&#xff1f; 从0开始搭建一个 vue flask 的数据分析系统&#xff1b;了解系统的整体架构&…