当前位置: 首页 > 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)详解
  • 特朗普称无意解雇鲍威尔,美国股债汇反弹、黄金高位下跌
  • 全国人大常委会调研组在宁波调研,张庆伟带队钟山易炼红参加
  • 深一度|坚守17年,这件事姚明就算赔钱也在继续做
  • 全球首个AI价值观数据集出炉
  • 新童谣童诗征稿活动在沪开启:设三个创作主题,面向全国征集
  • 上海与丰田汽车签署战略合作协议,雷克萨斯纯电动汽车项目落子金山