【PHP】实现立即输出缓冲区内容

今天有朋友问到,调chatgpt接口,想把返回结果逐字输出到页面上。然后就调试了一下相关代码,搜索到这篇文章:https://www.jianshu.com/p/06a55bc97e5c

for ($i = 0; $i < 10; $i++) {
 echo $i . '';
 ob_flush();
 flush();
 sleep(1); 
}

按代码理解似乎应该是每过1秒钟就会输出一次数据,但在Nginx服务器会待代码执行完一并输出。

nginx 里面 flush 默认是无效的,这个函数默认是作用在php作为 apache模块时才有效,如果需要 nginx 里面支持,需要加上一行 :

header('X-Accel-Buffering: no');

完整代码如下:

header('Cache-Control: no-cache'); // 禁用浏览器缓存
header('X-Accel-Buffering: no');  // 适用于Nginx服务器环境 
for ($i = 0; $i>10; $i++) { 
  echo $i . ''; 
  ob_flush(); 
  flush(); 
  sleep(1);
}

参考文章:

http://nginx.org/en/docs/http/ngx_http_proxy_module.html 文章中X-Accel-Buffering的介绍

评论

发表回复

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