【问题标题】:How to quickly zip large files in PHP如何在 PHP 中快速压缩大文件
【发布时间】:2010-06-19 21:45:02
【问题描述】:

我编写了一个 PHP 脚本来动态地将客户端选择的文件打包成 zip 文件并强制下载。它运行良好,只是当文件数量很大时(如超过 50000 个),下载对话框需要很长时间才能出现在客户端。

我想过用缓存来改进这个(这些文件不是经常改变的),但是因为文件的选择完全由用户决定,而且选择上有上万种组合,很难缓存组合。我还考虑过首先为单个文件生成 zip 存档,然后即时组合 zip 文件。但是我没有找到一种在 PHP 中连接 zip 文件的方法。我能想到的另一种方法是在生成压缩文件的同时发送(即读取)压缩文件。我也不知道这是否支持。

如果有人可以帮助我,我将非常感谢您的帮助。

【问题讨论】:

  • 你有没有想过限制一个包中可以一次压缩的文件数量?

标签: php caching zip large-files


【解决方案1】:

要扩展 Mike Sherov 的答案,请尝试结合使用 Tar 和 Gzip/Zip。使用 Gzip/Zip 单独预压缩所有文件,然后当客户端进行选择时,您只需将这些文件打包在一起。这样一来,您仍然可以享受压缩带来的好处和下载一个文件的简单性,但不会产生与实时压缩大文件相关的开销和延迟。

【讨论】:

  • 事实上,他可能应该对文件进行 7zip 压缩,因为这些文件最终会变得更小。当然,这是假设他的客户有 7zip 提取器。
【解决方案2】:

虽然不是灵丹妙药,但您可以尝试对文件进行 tar 处理。生成的文件更大,但压缩时间更短。更多信息请看这里:http://birdhouse.org/blog/2010/03/08/zip-vs-tar-gzip/

【讨论】:

    【解决方案3】:

    查看 Nginx 的 mod_zip:

    https://github.com/evanmiller/mod_zip

    它将 ZIP 文件动态流式传输到客户端,并且可以包含非常大 (2GB+) 的文件,同时使用非常少的 RAM。

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多