为客户端下载dynamic创build大型zip文件

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

唯一的问题是,有一些非常小的文件,每个用户都必须更改这个zip文件。

有没有一个优雅的方式来解决这个问题,除了不要求所有的邮编? 我已经考虑过的想法:

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

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

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

ZIP文件的结构基本上是:

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

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

如果使用这种方法,那么一次将ZIP文件提供给多个客户端将不会有并发问题,并且在构建归档时不需要使用任何磁盘空间。

恕我直言

你可以考虑两个zip文件的做法

  1. 第一个zip将包含所有的常用文件,并将其作为静态文件进行下载(但是,通过http传输Gb不可靠,可以建议用户使用scp,ftp或任何允许继续下载的客户端程序)
  2. 第二个zip文件(php脚本)应该包含一些非常小的文件,这些文件只能指定给用户,在这种情况下,你可以在内存/磁盘空间

你看过PHP的zip扩展吗? http://php.net/zip

从我所看到的,你可以在OOP的方式操纵ZIP档案。 我只是不确定的性能,可能是2GB的拉链可能需要一些时间来操纵,但你必须自己尝试。