我正在开发一个 PHP 脚本,它可以在事先不知道长度的情况下动态生成大量(多 MB)输出。我通过 fwrite()
直接写入 php://output
并尝试了标准输出和使用 Transfer-Encoding: chunked
(编码根据需要的 block ),但无论我尝试什么,浏览器都会等到所有数据都被写入,然后才会显示下载对话框。我也尝试过 flush()
在 header 之后和每个 block 之后,但这也没有什么区别。
我猜测 Apache 正在缓存输出,因为浏览器通常会在从服务器接收到几 kB 后显示。
有没有人知道如何在生成数据时停止缓存并将数据刷新到浏览器?
谢谢, J
最佳答案
首先,就像 BlaM 在他的评论中提到的那样,如果在 PHP 配置中启用了 OutputBuffering,它将无法工作,因此了解您的 phpinfo() 会很有用。
下一步,尝试它是否适用于存储在您的网络服务器上的大文件,使用 readfile 输出它。并且,与此一起,检查您是否发送了正确的 header 。有关如何读取文件 () 和发送正确 header 的提示,此处提供:StackOverflow: How to force a file download in PHP
当你在做的时候,调用ob_end_flush()或 ob_end_clean()在脚本的顶部。
关于php - Apache/PHP 输出缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3475720/