2 rocksent rocksent 于 2014.11.19 20:09 提问

PHP被阻塞情况下输出数据 ob_flush不管用
php
ob_start();
for($i=0;$i<20;$i++){
    //...耗时的操作 3秒钟
    echo "ABC";
    ob_flush();
}

运行的时候,需要1分钟才能显示ABC,怎样一条条的出来,3秒钟得出来一次呀?
谢谢解答在线等~

5个回答

xuzuning
xuzuning   Ds   Rxr 2014.11.20 12:21
已采纳

@ob_flush();
for($i=0;$i<20;$i++){
//...耗时的操作 3秒钟
echo "ABC" . str_repeat(' ', 256); //输出足以使浏览器缓冲区充满的数据(IE必须)
ob_flush(); //推出用户缓存
flush(); //推出系统缓存
}

这是利用系统的瑕疵产生的效果,应避免使用
建议用 ajax 轮询,或 websock 推送(如果你的用户群都支持的话)

save4me
save4me   Ds   Rxr 2014.11.20 09:59

参考 [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();
}

save4me
save4me   Ds   Rxr 2014.11.20 10:03

参考是 Calling ob_flush() and flush(), yet browser doesn't show any output until script finishes

如果还是不能显示,可以先输出2048 Byte空格,因为有些浏览器内部有些机制

chinmo
chinmo   Rxr 2014.11.20 12:21

浏览器一般都是满足多少字节以后才开始显示的,这个其实很简单的

for($i=0;$i<20;$i++){
echo "ABC";
flush();
ob_flush();
sleep(1);
}

chinmo
chinmo   Rxr 2014.11.20 12:22

for($i=0;$i<20;$i++){
echo "ABC";
flush();
ob_flush();
sleep(3);//3秒再执行输出
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!