Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
279 views
in Technique[技术] by (71.8m points)

ob_flush在PHP7中实时打印foreach里的echo不能用?

参考教程
https://ostack.cn/a/1190000005972877

我的环境环境 PHP 7.2+ nginx 1.18,gizp已经关闭
但是还是在执行完后才一起输出。
有朋友知道问题点在哪里吗?
谢谢


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

ob_flush 的确是输出缓冲区没错

但 NGINX 和 php-fpm 之间还有一层缓冲区, 不是 php 的 output buffer 函数可以控制的.

有几个地方需要调整, 你可以自己试试(取其一即可):

  1. PHP 输出一个 header('X-Accel-Buffering: no'); 的 HTTP Response Header, 仅影响当前请求
  2. 全局层面关闭 nginx 的 fastcgi 的缓冲, 配置为: fastcgi_buffering, 文档: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_buffering

或者干脆考虑换方案, 例如 websocket


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...