关于PHP flush()缓存输出的应用
经过几轮测试,个人总结有效方法有两种。百度智能云, 天翼云已经测试过了。
第一种:
public function get_data() { set_time_limit(0); ignore_user_abort(true); header('X-Accel-Buffering: no'); $k = 0; $arr = []; for($i = 0; $i < 10000; $i++) { $arr[] = $i; } foreach($arr as $key =>$value) { $j = round($key/count($arr), 2)*100; if($j == 80) { return json(['code' => 1, 'msg' => '错误', 'row' => $key]); } if($j != $k && floor($j) == $j) { $k = $j; echo 'str'; ob_flush(); flush(); } } return json(['code' => 0, 'msg' => '完成']); }
用header + echo + ob_flush() + flush() 的方式输出。 header('X-Accel-Buffering: no'); --------------------------------- echo 'str'; ob_flush(); flush();
第二种:
public function show_msg($msg) { echo $msg.' '.str_repeat(' ', 1024*4).''; ob_flush(); flush(); usleep(10000); }
用字符串占满缓冲器输出 echo $msg.' '.str_repeat(' ', 1024*4).''; -->看服务器设置缓存大小,设置冲出大小 ------------------------------------------ ob_flush(); flush();
参考手册: 《PHP参考手册》