php - Apache/PHP 输出缓存

标签 php apache http caching

我正在开发一个 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/

相关文章:

php - Apache PHP 中的 imagettfbbox()

php - 来自 ajax 请求的随机 500 内部服务器错误

node.js - Node 的http服务器是否对ReadableStream请求进行Content-Length验证

http - 如何使用 Angular2 使用 FormParams 发送帖子

php - 如果 PHP 中数组不为空,显示表格的最佳方式是什么?

php - 如何使用 php 比较两个文件来找到多余的行?

php - Google Appengine 1.9.3/4 和 WordPress 3.9 管理员用户在本地主机上功能不全

php - 我无法在 Mysql 中的另一个查询中运行查询。表消息。显示收件箱

ruby-on-rails - 每次更改Rails代码时,我都必须重新启动Apache

java - 如何避免表加载过时的搜索查询