You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP ZipArchive类按大小拆分Zip归档文件?

PHP实现分卷Zip归档的解决方案

原生ZipArchive的局限性

PHP自带的ZipArchive扩展不支持按指定大小拆分已有归档,也无法创建分卷压缩包,尤其处理单个大文件(如30MB文件拆分为5MB分卷)的场景完全满足不了需求——它只能做到按单个文件拆分归档,和你要的分卷逻辑完全不同。

可行替代方案

1. 纯PHP分卷压缩库

如果完全不想依赖系统exec命令,可以使用专门的纯PHP分卷Zip库,比如SplitZip(部分库仅支持创建分卷,不支持拆分已有归档,选型时注意)。这类库会遵循Zip分卷格式规范,将压缩数据分割为指定大小的片段,生成.z01、.z02直到.zip的分卷文件,确保能被标准解压工具识别合并。

示例代码(创建单个大文件的分卷归档):

require_once 'SplitZip.php';

$splitHandler = new SplitZip();
// 设置分卷大小为5MB(转换为字节)
$splitHandler->setSplitSize(5 * 1024 * 1024);
// 添加需要压缩的大文件
$splitHandler->addFile('/var/www/storage/app/large-file.txt');
// 生成分卷归档,前缀为split_yourfile
$splitHandler->create('/var/www/storage/app/split_yourfile');

2. 手动实现分卷逻辑(适合定制场景)

如果找不到适配的库,也可以手动实现分卷逻辑,但开发成本较高:

  • 针对已有Zip归档:需要读取归档的字节流,按指定大小切割为多个片段,同时生成分卷索引文件(需严格遵循Zip分卷格式,容易出现兼容性问题)。
  • 针对单个大文件:采用流式压缩的方式,每写入指定大小的压缩数据就切换到新的分卷文件,最后生成主Zip文件关联所有分卷。这种方式需要熟悉Zip压缩的底层格式细节。

3. 性能与兼容性提示

  • 纯PHP实现的分卷压缩性能会比系统zip命令低,处理大文件时需要考虑性能损耗。
  • 确保生成的分卷能被WinRAR、7-Zip等主流工具正常合并解压,测试时多验证不同环境的兼容性。

内容的提问来源于stack exchange,提问作者Hemerson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:00:13