php代码输出不实时显示,正常情况下输出内容会储存在缓冲区,执行完会一次性输出
解决方案:
- 服务器配置修改:需要修改php.ini配置和nginx.conf配置,会影响到整个平台的性能
- 利用ob_implicit_flush函数修改php输出方式,设置’X-Accel-Buffering: no’头修改nginx缓冲方式,达成实时输出
// 命令行下不需要这一行代码,因为无内容会报错
// 但是浏览器访问必然会有header信息,必须要清缓冲区
@ob_end_clean();
// 强制php直接输出内容到浏览器,不加入缓冲区
ob_implicit_flush(1);
// 设置nginx或apache不缓冲,直接输出
header('X-Accel-Buffering: no'); // 关键是加了这一行。
$vars = [1,2,3,4,5];
foreach ($vars as $key => $value) {
// 清空缓冲区
if (ob_get_contents()) ob_end_clean();
echo '数字:' . $value;
sleep(1);
}