• Reciprocity key to denuclearization process 2018-10-24
  • 拥有7.2亿美元比特币大金主突然苏醒 数字货币“吓跌” 2018-10-24
  • ::紫光阁::中共中央国家机关工作委员会 2018-10-23
  • 3名中国游客在瑞典遭粗暴对待 外交部敦促瑞方重视中方关切 2018-10-21
  • 国足20-0大胜!女梅西6球,女C罗轰5球,男足才赢19-0 2018-10-21
  • 消协提醒:春节预订酒店有技巧 预付卡消费需谨慎 2018-10-20
  • 陈敏尔唐良智会见传化集团董事长徐冠巨 2018-10-20
  • 扫黑除恶利剑高悬 前8月榕查处违法采砂案件93起 2018-10-20
  • 不能让所谓的收视率愚弄观众 2018-10-18
  • 新希望!中超19岁新星半年增重十斤 曾戏耍恒大两国脚 2018-10-17
  • 迎丰收 晒丰收 庆丰收 2018-10-15
  • “捂脸表情”被注册成商标?申请人不认为商标侵权 2018-10-15
  • 战巡南海、绕岛巡航…空军有“飞出去”的主心骨 2018-10-14
  • 幼儿园要求家长写一万字读后感:不能这样玩家长|幼儿园|家长-教育时讯 2018-10-13
  • 中国故宫文物展在希腊举行 2018-10-13
  • PHP实现即时将结果输出到浏览器

    栏目: 编程语言 发布于: 2014-04-24 23:30:01

    web开发中有没有碰到需要适时的将结果输出到浏览器页面而不刷新整个页面的需求呢?当你在处理一个过程需要耗时很长,但你又需要适时的知道程序当前的处理状况的时候,该怎么办呢?下面就分享一下如何使用php及时的输出当前结果到浏览器而不刷新整个页面的效果吧。

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

    <?php
    for($i=0;$i<10;$i++){
        echo $i;
        sleep(1);
    }
    ?>

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

    <?php
    //author www.phpernote.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实现即时将结果输出到浏览器
    IT技术书籍推荐:
    深入PHP:面向对象、模式与实践(第3版)
    深入PHP:面向对象、模式与实践(第3版)
    Mart Zandstra (作者), 陈浩 (译者), 吴孙滨 (译者), 胡丹 (译者), 李静 (译者)
    《深入PHP:面向对象、模式与实践(第3版)》是PHP专家经典力作的最新版本。书中主要介绍了如何使用面向对象技术和设计模式编写稳定的、可维护的代码,如何使用Subversion管理多个开发人员,如何使用Phing和PEAR进行构建和安装,以及将构建和测试过程自动化的策略,包括持续集成?!渡钊隤HP:面向对象、模式与实践(第3版)》适合中高级PHP程序员阅读。