PHP:在中间服务器上即时压缩文件流,而不存储(太多)数据

Posted

技术标签:

【中文标题】PHP:在中间服务器上即时压缩文件流,而不存储(太多)数据【英文标题】:PHP: Zip a file stream on the fly on an intermediate server, without storing (too much) data 【发布时间】:2015-06-24 08:07:51 【问题描述】:

相关:

On-the-fly zipping & streaming of large files, in php or otherwise Streaming a large file using PHP

我正在寻找其他主题中描述的方法的组合。我可能需要以小块读取文件(从 URL),将它们通过管道传输到 proc_open zip 命令的 STDIN,获取输出并将其刷新到客户端。

我需要做什么:

从存储服务器的 URL 读取文件流 在网络服务器上即时压缩 使用大小未知的 content-disposition 将其作为下载提供到 Web 浏览器(毕竟它是一个流)。

我不能做什么:

在网络服务器上存储文件 在存储服务器上运行代码 使用大量内存 让客户端等待下载

因此需要在远程块读取仍在进行时开始刷新数据。

这在 PHP 中是否可行?我觉得这在提供更多回调/异步功能的语言中会容易得多,但在这种情况下我被 PHP 卡住了。

欢迎提供任何示例或一些粗略的代码!

【问题讨论】:

【参考方案1】:

它不是 PHP,但这个项目完全符合您的要求。您可以将其作为独立服务器托管并从 php 调用它:

https://github.com/scosman/zipstreamer

【讨论】:

以上是关于PHP:在中间服务器上即时压缩文件流,而不存储(太多)数据的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的压缩流

如何即时压缩和传递文件到浏览器?

AWS php sdk 用于即时写入 s3 存储桶

ZipStream 在 PHP 中动态创建的 zip 文件不会在 OSX 中打开

获取Zip文件中文件的解压缩流

返回预压缩的静态内容,而不是即时压缩它