动态创建大型zip用于客户端下载

dav*_*mer 5 php architecture linux apache amazon-web-services

有一个项目,每个用户可以下载一个包含大约2GB数据的zip ...

唯一的问题是,有一些非常小的文件必须在每个用户的zip中更改.

有没有一种优雅的方法来解决这个问题,除了不要求所有这些都在拉链?我考虑过的想法:

1)将挂单推送到队列,并在资源可用时处理该队列...处理将意味着为每个订单创建一个新的zip,然后在N天后删除它

2)以某种方式在PHP中操作zip,然后通过原始类型的推送(即吐出标题,然后根据文件+自定义文件生成数据)

我可能会遇到的最佳方法或内存问题的想法?谢谢!

cdh*_*wie 2

ZIP 文件结构基本上是:

  1. 魔术标头,将文件标识为 ZIP 存档。
  2. 所有文件数据连接在一起。(可以选择压缩各个文件。)
  3. 存档目录,包含文件元数据(名称、大小等)以及文件数据的偏移量。

这意味着您应该能够即时构建和输出 ZIP 存档,只需要将目录数据保留在内存中,直到最后可以将其写出。ZIP 存档本身永远不需要存在于磁盘上。

如果您使用此方法,则一次向多个客户端提供 ZIP 文件时不会出现并发问题,并且在构建存档时无需使用任何磁盘空间。