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); }问题办理,但又出来个问题,欣赏器还不兼容了。实际测试中只有 Firefox 按估量结果即时输出了功效,而在 IE Safari Opera 等欣赏器中照旧一次性的输出功效。查阅相关资料发明是因为差异的欣赏器对缓冲的处理惩罚方法差异,Firefox 在被要求强制刷新缓存时很听话,而IE需要在吸收到256个字节后才会将内容即时展此刻界面上,Safari 需要1024个字节,Opera 更有本性,只有在碰着HTML标签的时候才会即时输出(Safari也是如此)。
插手空间字符适配IE对付以上问题,针对IE和Safari,可以在输出功效之前先输出大于限定命目标空缺字符:
echo str_repeat(" ",1024); for($i=0;$i<10;$i++){ echo $i; ob_flush(); flush(); sleep(1); }插手HTML标签兼容欣赏器而对付Opera、Safari碰着HTML标签后才会即时输出的问题,我们在代码中插手一个<br/>换行的HTML标签,来适配代码
echo str_repeat(" ",1024); for($i=0;$i<10;$i++){ echo $i."<br>"; ob_flush(); flush(); sleep(1); }至此已根基实现了在各个欣赏器中到达一致的结果了,至于实际事情中,你大概是别的一种目标可是需要雷同这种结果,则只需要按照需要做相应的修改即可。