CentOS 8 Apache FPM/FastCGI环境下PHP flush不生效问题求助
排查与解决步骤
- 第一步:检查Apache的FastCGI缓冲配置
如果你使用mod_proxy_fcgi对接PHP-FPM,默认开启的输出缓冲是最常见的失效原因,需要在Apache虚拟主机配置或全局httpd.conf中添加以下参数关闭缓冲:
如果你使用# 若使用ProxyPassMatch配置,替换路径为你自己的网站根目录绝对路径 ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/你的网站根目录绝对路径/$1 flushpackets=on flushwait=0 # 额外关闭全局FastCGI缓冲 ProxyFCGIBufferSize 0 ProxyBuffers 0mod_fcgid对接PHP-FPM,添加以下配置:FcgidOutputBufferSize 0 - 第二步:检查PHP-FPM池配置的覆盖项
打开PHP-FPM的池配置文件(通常路径为/etc/php-fpm.d/www.conf),确认不存在php_admin_value[output_buffering]或者php_admin_flag[output_buffering]的强制配置,如果存在请将值设为Off或者注释掉对应行,避免覆盖php.ini的全局配置。 - 第三步:补充浏览器兼容填充
部分浏览器默认需要接收至少256~1024字节的内容才会开始渲染页面,你可以调整测试代码,输出内容后追加足够长度的空白字符触发浏览器即时渲染:ob_implicit_flush(); echo '1'; // 追加1KB空白字符触发浏览器渲染 echo str_repeat(' ', 1024); flush(); sleep(5); echo '2'; - 第四步:重启服务生效
修改完配置后执行命令重启Apache和PHP-FPM:systemctl restart httpd php-fpm
内容的提问来源于stack exchange,提问作者Milad Faint
相关产品推荐
相关产品推荐

