PHP实现文件打包ZIP的方法

凌晨两点半
凌晨两点半
发布时间:2026-10-14| 2人浏览过
原创

本文详细介绍了一个用于在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程序设计技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。