问题描述
- PHP被阻塞情况下输出数据 ob_flush不管用
-
ob_start(); for($i=0;$i<20;$i++){ //...耗时的操作 3秒钟 echo "ABC"; ob_flush(); }
运行的时候,需要1分钟才能显示ABC,怎样一条条的出来,3秒钟得出来一次呀?
谢谢解答在线等~
解决方案
@ob_flush();
for($i=0;$i<20;$i++){
//...耗时的操作 3秒钟
echo "ABC" . str_repeat(' ', 256); //输出足以使浏览器缓冲区充满的数据(IE必须)
ob_flush(); //推出用户缓存
flush(); //推出系统缓存
}
这是利用系统的瑕疵产生的效果,应避免使用
建议用 ajax 轮询,或 websock 推送(如果你的用户群都支持的话)
解决方案二:
参考 [Calling ob_flush() and flush(), yet browser doesn't show any output until script finishes][1]
<?php
header( 'Content-type: text/html; charset=utf-8' );
for($i=0;$i<20;$i++){
//...耗时的操作 3秒钟
echo 'ABC';
ob_flush();
flush();
}
解决方案三:
参考是 Calling ob_flush() and flush(), yet browser doesn't show any output until script finishes
如果还是不能显示,可以先输出2048 Byte空格,因为有些浏览器内部有些机制
解决方案四:
浏览器一般都是满足多少字节以后才开始显示的,这个其实很简单的
for($i=0;$i<20;$i++){
echo "ABC";
flush();
ob_flush();
sleep(1);
}
解决方案五:
for($i=0;$i<20;$i++){
echo "ABC";
flush();
ob_flush();
sleep(3);//3秒再执行输出
}