php执行结果,PHP执行结果实时输出并显示到浏览器

如何使用php实时的输出当前结果到浏览器?在进行php程序开发或者其它web开发中有没有碰到需要实时的将结果输出到浏览器页面而不刷新整个页面的需求呢?有时候当你在处理一个过程时可能需要很长时间,而这个过程浏览器没有任何结果输出,一直处于等待状态,不知程序是否还在执行,此时你又需要实时的知道程序当前的处理状况的时候,该怎么办呢?下面就分享一下如何使用php及时的输出当前结果到浏览器而不刷新整个页面的效果吧。

下面以一个简单的例子来说明这个问题。首先来看一段php代码:

for($i=0;$i<10;$i++){

echo $i;

sleep(1);

}

?>

上面这段程序如果在PHP解释器中执行,每秒会输出一个数,和预计效果一样。但在浏览器中访问时,结果却是浏览器在十秒之后一次性地显示了所有结果。对于这个问题,我们可以使用 ob_flush() 和 flush() 来强制刷新浏览器缓存,因此程序可以改为:

for($i=0;$i<10;$i++){

echo $i;

ob_flush();

flush();

sleep(1);

}

?>

问题解决,但换个浏览器又出来个问题,难道跟css一样,也有浏览器不兼容?实际测试中只有 Firefox 按预计效果即时输出了结果,而在 IE  Safari Opera 等器中还是一次性的输出结果。查阅相关资料发现是因为不同的浏览器对缓冲的处理方式不同,Firefox 在被要求强制刷新缓存时很听话,而IE需要在接收到256个字节后才会将内容即时展现在界面上,Safari 需要1024个字节,Opera 更有个性,只有在遇到HTML标签的时候才会即时输出(Safari也是如此)。

对于以上问题,针对IE和Safari,可以在输出结果之前先输出大于限定数目的空白字符:

echo str_repeat(" ",1024);

for($i=0;$i<10;$i++){

echo $i;

ob_flush();

flush();

sleep(1);

}

?>

而对于Opera、Safari遇到HTML标签后才会即时输出的问题,由于一般我们不会只往浏览器中输出纯文本内容,故可以不作考虑。对于上面的程序,可以在输出结果中加入HTML标签来达到目的:

echo str_repeat(" ",1024);

for($i=0;$i<10;$i++){

echo $i."
";

ob_flush();

flush();

sleep(1);

}

?>

至此已基本实现了在各个浏览器中实现php执行结果实时输出并显示到浏览器的效果了,至于实际工作中,你可能是另外一种目的但是需要类似这种效果,则只需要根据需要做相应的修改即可。

除了上述方法外,PHP使用缓存即时输出内容(output buffering)也可行,不过经过测试还是上述的方法好用。

$buffer = ini_get('output_buffering');

echo str_repeat(' ',$buffer+1);     //防止浏览器缓存

ob_end_flush();     //关闭缓存

for( $i=1; $i<=10; $i++ ){

echo '第 '.$i.' 次输出.'."
\n";

flush(); //刷新缓存(直接发送到浏览器)

sleep(1);

}

echo '输出完毕!';

(责任编辑:我爱学习网)

更多技巧文章请关注公众号:huixiang_360

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值