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

php实现zip压缩

可以使用ZipArchive类来创建ZIP压缩文件。ZipArchive是PHP内置的一个类,提供了创建、打开、读取、写入和关闭ZIP文件的功能。

示例:压缩单个文件

<?php$fileToZip = 'path/to/your/file.txt';
$zipFileName = 'compressed.zip';$zip = new ZipArchive();
if ($zip->open($zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {$zip->addFile($fileToZip, basename($fileToZip)); // 第二个参数是文件在ZIP中的名称$zip->close();echo "文件已成功压缩到 $zipFileName";
} else {echo "无法创建ZIP文件";
}?>

示例:压缩多个文件

<?php$filesToZip = ['file1.txt', 'file2.txt', 'file3.txt'];
$zipFileName = 'multiple_files.zip';$zip = new ZipArchive();
if ($zip->open($zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {foreach ($filesToZip as $file) {if (file_exists($file)) {$zip->addFile($file, basename($file));}}$zip->close();echo "文件已成功压缩到 $zipFileName";
} else {echo "无法创建ZIP文件";
}?>

示例:压缩文件夹

压缩文件夹需要递归地遍历文件夹中的所有文件和子文件夹。以下是一个递归函数的示例:

<?phpfunction addFolderToZip($folder, &$zipFile, $exclusiveLength) {$handle = opendir($folder);while ($f = readdir($handle)) {if ($f != '.' && $f != '..') {$filePath = "$folder/$f";// 去掉前缀的路径,以便在ZIP中保持相对路径$localPath = substr($filePath, $exclusiveLength);if (is_file($filePath)) {$zipFile->addFile($filePath, $localPath);} elseif (is_dir($filePath)) {// 递归调用以添加子文件夹$zipFile->addEmptyDir($localPath);addFolderToZip($filePath, $zipFile, $exclusiveLength);}}}closedir($handle);
}$folderToZip = 'path/to/your/folder';
$zipFileName = 'folder_compressed.zip';$zip = new ZipArchive();
if ($zip->open($zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {addFolderToZip($folderToZip, $zip, strlen("$folderToZip/"));$zip->close();echo "文件夹已成功压缩到 $zipFileName";
} else {echo "无法创建ZIP文件";
}?>

我的个人PHP项目:

PHP全文检索引擎 WindSearch: https://github.com/rock365/windsearch

请帮我点个star~谢谢你!

http://www.xdnf.cn/news/427.html

相关文章:

  • Linux:基础IO---动静态库
  • python 库 下载 ,整合在一个小程序 UIUIUI
  • Grouped Query Attention (GQA) PyTorch实现
  • 单片机如何通过串口与上位机进行数据交换
  • RAG vs. CAG vs. Fine-Tuning:如何为你的大语言模型选择最合适的“脑力升级”?
  • 使用EXCEL绘制平滑曲线
  • 从代码学习深度学习 - 优化算法 PyTorch 版
  • Vue 3 中将 ref 创建的响应式对象数据转换为普通(非响应式)的数据
  • JAVA IO、BIO、NIO、AIO及零拷贝
  • Warcraft Logs [Classic] [WCL] Usage Wizard <HTOC>
  • FPGA系列之DDS信号发生器设计(DE2-115开发板)
  • 睡前小故事数据集分享
  • 腾讯wxg企业微信 后端开发一面
  • [Swift]Xcode模拟器无法请求http接口问题
  • 阿里云Clickhouse 冷热数据分层存储 实战记录
  • 【图片识别改名工具】图片文件区域OCR识别并自动重命名,批量识别指定区域根据指定识别文字批量改名,基于WPF和阿里云的技术方式实现
  • 二进制裁剪命令mips-linux-gnu-strip 命令的使用
  • NoSQl注入学习
  • 【Flutter动画深度解析】性能与美学的完美平衡之道
  • 多人五子棋联机对战平台 测试报告
  • 【绘制图像轮廓】图像处理(OpenCV) -part7
  • leetcode哈希表(六)-三数相加
  • P11299 [NOISG 2021 Finals] Fraud 题解
  • PHP异常处理__Exception类
  • 实验4基于神经网络的模式识别实验
  • opencv 图像的旋转
  • linux下C++性能调优常用的工具
  • 真实波幅策略思路
  • 数据驱动增长:大数据与营销自动化的结合之道
  • 芝法酱躺平攻略(21)——kafka安装和使用