PHP流式输出,在Nginx下可以正常刷新缓存区 , 但是在Apache下会等待循环全部执行完,才会刷新!有怎么解决?
header('X-Accel-Buffering: no'); // Nginx情况下必须加这一行
header('Content-type: text/event-stream');
header('Cache-Control: no-cache');
// 输出数据
for($i = 0; $i < 10; $i++){
echo "data:".$i . "n";
ob_flush();
flush();
sleep(1); // 模拟耗时操作
}
在Apache下,PHP默认会将输出缓冲区的内容一次性发送给客户端,导致无法实时刷新。为了解决这个问题,可以使用以下两种方法之一:
- 使用 ob_flush() 和 flush() 函数:这两个函数用于手动刷新输出缓冲区,将缓冲区的内容立即发送给客户端。在你的代码中已经使用了这两个函数,但在某些情况下可能需要进行额外的配置。确保在PHP配置文件(php.ini)中启用了输出缓冲区功能。找到 output_buffering 的配置项并确保其值为 Off 或 0 ,以禁用输出缓冲区。
- 使用Apache的 mod_env 模块:另一种解决方法是使用Apache的 mod_env 模块来设置环境变量,以禁用输出缓冲区。在你的Apache配置文件(例如, httpd.conf> 或 .htaccess )中添加以下行:
SetEnv no-gzip 1 SetEnv proxy-nokeepalive 1
这些设置将禁用gzip压缩和持久连接,从而使Apache立即将缓冲区的内容发送给客户端。
请注意,这些解决方法可能需要对服务器进行配置更改,因此请确保你有足够的权限来进行修改。另外,使用流式输出时要注意潜在的性能问题,因为它会占用服务器资源并增加网络流量。
原文地址:https://blog.csdn.net/airen3339/article/details/134712126
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_18431.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。