PHP 刷新缓存区的问题!

PHP流式输出,在Nginx下可以正常刷新缓存区 , 但是在Apache下会等待循环全部执行完,才会刷新!有怎么解决?

php 复制代码
 
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默认会将输出缓冲区的内容一次性发送给客户端,导致无法实时刷新。为了解决这个问题,可以使用以下两种方法之一:

  1. 使用 ob_flush() 和 flush() 函数:这两个函数用于手动刷新输出缓冲区,将缓冲区的内容立即发送给客户端。在你的代码中已经使用了这两个函数,但在某些情况下可能需要进行额外的配置。确保在PHP配置文件(php.ini)中启用了输出缓冲区功能。找到 output_buffering 的配置项并确保其值为 Off 或 0 ,以禁用输出缓冲区。

  2. 使用Apache的 mod_env 模块:另一种解决方法是使用Apache的 mod_env 模块来设置环境变量,以禁用输出缓冲区。在你的Apache配置文件(例如, httpd.conf> 或 .htaccess )中添加以下行:

    php 复制代码
    SetEnv no-gzip 1
       SetEnv proxy-nokeepalive 1

    这些设置将禁用gzip压缩和持久连接,从而使Apache立即将缓冲区的内容发送给客户端。

    请注意,这些解决方法可能需要对服务器进行配置更改,因此请确保你有足够的权限来进行修改。另外,使用流式输出时要注意潜在的性能问题,因为它会占用服务器资源并增加网络流量。

相关推荐
碎光拾影5 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code5 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121316 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
爬也要爬着前进7 小时前
redis主从搭建
数据库·redis·缓存
CRMEB系统商城7 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience8 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
我的xiaodoujiao8 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_408099678 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
爱喝水的鱼丶9 小时前
SAP-ABAP:ALV通用封装实践——搭建可复用的ALV开发工具类,减少80%重复代码
开发语言·性能优化·sap·abap·erp·alv
脱胎换骨-军哥9 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust