为了账号安全,请及时绑定邮箱和手机立即绑定

LAMP:如何为用户动态创建.Zip大型文件,无需磁盘/ CPU抖动

LAMP:如何为用户动态创建.Zip大型文件,无需磁盘/ CPU抖动

PHP
慕运维8079593 2019-08-30 17:35:13
通常,Web服务需要压缩几个大文件以供客户端下载。最明显的方法是创建一个临时zip文件,然后将echo其创建给用户或将其保存到磁盘并重定向(将来某个时间删除它)。但是,这样做有缺点:密集的CPU和磁盘颠簸的初始阶段,导致......准备好存档时,用户会有相当大的初始延迟每个请求的内存占用非常高使用大量临时磁盘空间如果用户取消下载中途,初始阶段(CPU,内存,磁盘)中使用的所有资源都将被浪费像ZipStream-PHP这样的解决方案通过将数据按文件铲入Apache文件来改进这一点。但是,结果仍然是高内存使用率(文件完全加载到内存中),以及磁盘和CPU使用率的大幅飙升。相反,请考虑以下bash片段:ls -1 | zip -@ - | cat > file.zip  # Note -@ is not supported on MacOS这里,zip以流模式运行,导致内存占用量低。管道具有整数缓冲区 - 当缓冲区已满时,OS会暂停写入程序(管道左侧的程序)。这样可确保zip其输出速度与输出速度一样快cat。然后,最佳方式是执行相同的操作:cat使用Web服务器进程替换,将zip文件流式传输给用户,并将其动态创建。与仅流式传输文件相比,这将产生很少的开销,并且将具有无问题的,非尖峰的资源配置文件。如何在LAMP堆栈上实现这一目标?
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 455 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信