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

  1. 使用 ob_flush() 和 flush() 函数:这两个函数用于手动刷新输出缓冲区,将缓冲区的内容立即发送客户端。在你的代码中已经使用了这两个函数,但在某些情况下可能需要进行额外配置。确保在PHP配置文件php.ini)中启用了输出缓冲功能。找到 output_buffering配置项并确保其值为 Off 或 0 ,以禁用输出缓冲区。
  2. 使用Apachemod_env 模块:另一种解决方法是使用Apachemod_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进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注