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

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~谢谢你!

相关文章:

  • 作业2 CNN实现手写数字识别
  • C++入门小馆: 深入string类
  • 藏品馆管理系统
  • Spring Boot 中基于 Reactor 的服务器端事件(SSE)推送机制实践
  • Linux系统:详解进程等待wait与waitpid解决僵尸进程
  • TensorFlow 实现 Mixture Density Network (MDN) 的完整说明
  • 【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(16):ReactExecutor
  • 蓝桥杯之递归
  • Python异常处理
  • ArcPy Mapping 模块基础
  • 【Unity】bug记录——部分物体突然不受animator控制
  • 释放 Mac 存储空间:Ollama 模型迁移到外接 NVMe 磁盘
  • 验证Kubernetes的服务发现机制
  • kafka的零拷贝技术
  • 【大疆dji】ESDK开发环境搭建(软件准备篇)
  • LangChain框架-检索器详解
  • swagger的简介及使用方法
  • 文字的力量
  • 2021-11-10 C++蜗牛爬井进3退1求天数
  • MySql 三大日志(redolog、undolog、binlog)详解
  • 思政课也精彩,“少年修齐讲堂”开讲《我的中国“芯”》
  • 特朗普称加总理将很快访美,白宫:不影响将加拿大打造成“第51个州”计划
  • 同日哑火丢冠,双骄的下山路,手牵手一起走
  • 山东省委组织部办公室主任吴宪利已任德州市委常委、组织部部长
  • 十二届上海市委第六轮巡视全面进驻,巡视组联系方式公布
  • 三大猪企一季度同比均实现扭亏为盈,营收同比均实现增长