PHP实现即时将结果输出到浏览器
添加时间:2014-7-3 3:08:15
添加:
思海网络
web开发中有没有碰到需要适时的将结果输出到浏览器页面而不刷新整个页面的需求呢?当你在处理一个过程需要耗时很长,但你又需要适时的知道程序当前的处理状况的时候,该怎么办呢?下面就分享一下如何使用php及时的输出当前结果到浏览器而不刷新整个页面的效果吧。
下面以一个简单的例子来说明这个问题。首先来看一段代码:
<?php for($i=0;$i<10;$i++){ echo $i; sleep(1); } ?>
上面这段程序如果在PHP解释器中执行,每秒会输出一个数,和预计效果一样。但在浏览器中访问时,结果却是浏览器在十秒之后一次性地显示了所有结果。对于这个问题,我们可以使用 ob_flush() 和 flush() 来强制刷新浏览器缓存,程序改为:
<?php //author www.Alixixi.com 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和Safari,可以在输出结果之前先输出大于限定数目的空白字符:
<?php echo str_repeat(" ",1024); for($i=0;$i<10;$i++){ echo $i; ob_flush(); flush(); sleep(1); } ?>
而对于Opera、Safari遇到HTML标签后才会即时输出的问题,由于一般我们不会只往浏览器中输出纯文本内容,故可以不作考虑。对于上面的程序,可以在输出结果中加入HTML标签来达到目的:
<?php echo str_repeat(" ",1024); for($i=0;$i<10;$i++){ echo $i."<br>"; ob_flush(); flush(); sleep(1); } ?>
至此已基本实现了在各个浏览器中达到一致的效果了,至于实际工作中,你可能是另外一种目的但是需要类似这种效果,则只需要根据需要做相应的修改即可。
关键字:PHP、浏览器、程序
新文章:
- CentOS7下图形配置网络的方法
- CentOS 7如何添加删除用户
- 如何解决centos7双系统后丢失windows启动项
- CentOS单网卡如何批量添加不同IP段
- CentOS下iconv命令的介绍
- Centos7 SSH密钥登陆及密码密钥双重验证详解
- CentOS 7.1添加删除用户的方法
- CentOS查找/扫描局域网打印机IP讲解
- CentOS7使用hostapd实现无AP模式的详解
- su命令不能切换root的解决方法
- 解决VMware下CentOS7网络重启出错
- 解决Centos7双系统后丢失windows启动项
- CentOS下如何避免文件覆盖
- CentOS7和CentOS6系统有什么不同呢
- Centos 6.6默认iptable规则详解