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

devtools/2024/9/22 17:39:44/

函数

    /*** 压缩整个文件夹为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.ppmy.cn/devtools/85087.html

相关文章

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…

go-kratos 学习笔记(5) 删除hellword从新生成服务

go-kratos 删除hellword模版里的服务&#xff0c;从新生成服务users 直接删除api/helloword 目录&#xff0c;在api目录下新建 users目录&#xff1b;使用命令生成新的proto #项目根目录执行 kratos proto add api/users/user.protobuf generate生成的user.proto需要根据自己…

Laravel:揭秘PHP世界中最优雅的艺术品

1. 引言 在PHP的世界里&#xff0c;框架如繁星般璀璨&#xff0c;但Laravel以其独特的魅力和优雅&#xff0c;成为了众多开发者心中的艺术品。本文将深入探讨Laravel为何能在众多PHP框架中脱颖而出&#xff0c;成为最优雅的选择。 1.1 Laravel的诞生背景 Laravel的诞生可以…

2024秋招算法

文章目录 参考资料刷题感悟一 数组1.1 二分查找1.2 移除元素1.3 长度最小的子数组1.4 螺旋矩阵1.5 在排序数组中查找元素的第一个和最后一个位置 二 链表2.1 移除链表元素2.2 设计链表2.3 反转链表2.4 两两交换链表中的节点2.5 删除链表的倒数第N个节点2.6 链表相交2.7 环形链表…

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 多选题序号4

基础认证题库请移步&#xff1a;HarmonyOS应用开发者基础认证题库 注&#xff1a;有读者反馈&#xff0c;题库的代码块比较多&#xff0c;打开文章时会卡死。所以笔者将题库拆分&#xff0c;单选题20个为一组&#xff0c;多选题10个为一组&#xff0c;题库目录如下&#xff0c;…

TCP的socket的API

关键的两个类 1)ServerSocket 该类专门给服务器用的,这个构造方法传入端口进行连接 accept相当于是接听操作,进行连接 close关闭当前套接字,当socket对象与进程的生命周期不一致时需要提前释放资源,就需要调用close 为什么UDP的客户端服务器中没有这个close方法,因为这个sock…

【动态规划】力扣.213. 打家劫舍 II

你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一…

Python应用开发——30天学习Streamlit Python包进行APP的构建(20):配置

Configuration配置 config.toml config.toml 是一个可选文件,你可以为工作目录或全局开发环境定义它。当 config.toml 文件同时在全局和工作目录中定义时,Streamlit 会合并配置选项,并优先使用工作目录配置。此外,你还可以使用环境变量和命令行选项来覆盖其他配置选项。更…