PHP实现文件打包ZIP的方法
本文详细介绍了一个用于在PHP中生成ZIP文件的类实现。通过该示例代码,您可以快速掌握如何利用系统内置的ZipArchive扩展,将多个指定路径下的文件自动打包成ZIP压缩包,非常适合需要批量处理或归档文件的开发需求。
使用PHP ZIPArchive 类构建打包功能
在日常Web开发中,我们经常需要将多个文件或图片进行打包下载。PHP自带的 ZipArchive 扩展为此提供了便捷的底层接口。下面展示了一个封装好的类(zipFile),它简化了配置文件路径和添加文件的流程。
第1步:定义ZipArchive核心配置
首先,我们需要创建一个类来管理整个打包过程。这个类的构造函数接收一个配置数组,主要用于指定生成的ZIP文件存储的位置。
class zipFile {
public $files = array();
private $fileHash = "";
private $zip = "";
public $settings = NULL;
public $fileInfo = array (
"name" => "",
"numFiles" => 0,
"fullFilePath" => ""
);
// 初始化ZIP对象
public function __construct($settings) {
$this->zipFile($settings);
}
public function zipFile($settings) {
// 1. 实例化 ZipArchive
$this->zip = new ZipArchive();
// 2. 解析配置参数(此处以路径为例)
$this->settings = new stdClass();
foreach ($settings as $k => $v) {
$this->settings->$k = $v;
}
}
}
第2步:实现创建与写入逻辑
接下来是核心的 create() 方法。该方法会为生成的压缩包生成唯一文件名(基于MD5哈希),然后判断文件是否已存在。如果不存在,则打开ZIP文件并执行写入操作。
public function create() {
// 根据当前待添加的文件列表生成唯一的文件名
$this->fileHash = md5(implode(",", $this->files));
$this->fileInfo["name"] = $this->fileHash . ".zip";
$this->fileInfo["numFiles"] = count($this->files);
// 拼接完整的保存路径
$this->fileInfo["fullFilePath"] = $this->settings->path . "/" . $this->fileInfo["name"];
if (file_exists($this->fileInfo["fullFilePath"])) {
return array (
false,
"already created: " . $this->fileInfo["fullFilePath"]
);
} else {
// 以 CREATE 模式打开新的 ZIP 文件
$this->zip->open($this->fileInfo["fullFilePath"], ZIPARCHIVE::CREATE);
// 遍历文件并添加到压缩包
$this->addFiles();
// 关闭并写入磁盘
$this->zip->close();
return array (
true,
"new file created: " . $this->fileInfo["fullFilePath"]
);
}
}
addFiles() 是一个私有辅助方法,负责逐个将物理文件添加至ZIP内部。
private function addFiles() {
foreach ($this->files as $k) {
// 按原文件名添加到包内
$this->zip->addFile($k, basename($k));
}
}
第3步:调用类进行打包演示
完成类的定义后,我们可以在脚本外部配置目标路径并触发打包。这里我们将设置目标路径为当前脚本所在目录,并选定两个本地图片加入压缩包。
// 配置环境参数:设置输出目录
$settings = array (
"path" => dirname(__FILE__)
);
// 实例化类
$zipFile = new zipFile($settings);
// 设置要打包的文件列表
$zipFile->files = array (
"./images/navoff.jpg",
"./images/navon.jpg"
);
// 执行打包操作
list($success, $error) = $zipFile->create();
if ($success === true) {
echo "SUCCESS!";
} else {
echo "ERROR because: " . $error;
}
以上就是《php生成zip文件类实例》的详细内容,更多关于php程序设计技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













