我编写了一个PHP脚本,用于将客户端选择的文件动态打包到zip文件中并强行下载。它运行良好,除了文件数量很大(如超过50000)时,下载对话框在客户端显示需要很长时间。
我考虑过使用缓存改进这些(这些文件不经常更改),但由于文件的选择完全取决于用户,并且选择上有数万种组合,因此很难缓存组合。我还考虑过首先为单个文件生成zip存档,然后即时组合zip文件。但我找不到在PHP中连接zip文件的方法。我能想到的另一种方法是在生成zip文件的同时发送(即读取)zip文件。我也不知道这是否得到支持。
如果有人可以帮助我,我真的很感谢你的帮助。
答案 0 :(得分:2)
为了扩展Mike Sherov的答案,尝试使用Tar和Gzip / Zip的组合。使用Gzip / Zip单独预压缩所有文件,然后当客户端进行选择时,您只需将这些文件一起打印即可。这样你仍然可以获得压缩的好处和下载一个文件的简单性,但没有任何与实时压缩大文件相关的开销和延迟。
答案 1 :(得分:0)
虽然不是银弹,但你可以试试tar文件。生成的文件较大,但压缩时间要短得多。有关详细信息,请参阅此处:http://birdhouse.org/blog/2010/03/08/zip-vs-tar-gzip/
答案 2 :(得分:0)
查看nginx的mod_zip:
https://github.com/evanmiller/mod_zip
它动态地将ZIP文件流式传输到客户端,并且可以包含非常大的(2GB +)文件,同时使用非常少的RAM。