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

时间:2011-09-05 17:08:48

标签: php linux apache architecture amazon-web-services

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

ZIP文件结构基本上是:

  1. Magic标头,将文件标识为ZIP存档。
  2. 所有文件数据连接在一起。 (可以选择压缩单个文件。)
  3. 归档目录,包含文件元数据(名称,大小等)以及文件数据的偏移量。
  4. 这意味着您应该能够即时构建和输出ZIP存档,只需要将目录数据保留在内存中,直到最后将其写出来。 ZIP存档本身永远不需要存在于磁盘上。

    如果使用这种方法,在同时向多个客户端提供ZIP文件时不会出现并发问题,并且在构建存档时不必使用任何磁盘空间。

答案 1 :(得分:0)

IMHO

你可以考虑两种zip文件方法

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

答案 2 :(得分:0)

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

据我所见,您可以以OOP方式动态操作ZIP存档。我只是不确定性能,可能是2GB拉链可能需要一些时间来操作,但你必须亲自尝试。