<?php
ob_end_clean();
for ($i=10; $i>0; $i--)
{
    echo $i;
    flush();
    sleep(1);
}
?><?php
ob_end_clean();
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
    echo $i;
    sleep(1);
}
?>最近比较空,想学习下php server push玩玩。以上代码是网上copyright来的,说是这么写不会缓存了。
但是我用IE7试了下,第一次打开的话还是缓存了最后才输出显示的啊。
莫非是php.ini还要设置output_buffering?
哪位大哥来解释一下呢

解决方案 »

  1.   

    //添加一句header(”Cache-Control:no-cache,must-revalidate”);
      

  2.   

    比较完美的php输出不缓存
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Cache-Control: no-cache");
    header("Pragma: no-cache");
      

  3.   


    <?php
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
    header("Cache-Control: no-cache"); 
    header("Pragma: no-cache");ob_end_clean();//修改部分
    for ($i=10; $i>0; $i--)
    {
        echo $i;
        flush();
        sleep(1);
    }
    ?>
    我试了,还是过了十秒左右才把内容输出的啊
      

  4.   

    ob_flush();
    flush();
    for ($i=10; $i>0; $i--)
    {
        echo $i;
        flush();
        sleep(1);
    }
    你试下
      

  5.   

    这个只是php的缓冲机制,数据已经有,如何推送到浏览器,php有函数可以控制.
    <?php
    ob_start();//开始缓冲数据
    for ($i=10; $i>0; $i--)
    {
        echo $i."<br/>";
        ob_end_flush();//停止缓冲数据
        flush();//将不在缓冲中的数据发送至浏览器。
        sleep(1);
    }
    ?>
    server push是指web server如何推送数据到客户端,b/s模式只能利用长连接,轮询来模拟server push,因为你不发送http请求给web server,你就会一定时间内和web server失去连接,谈何server push?
      

  6.   

    我希望每秒输出一次数据啊>> b/s模式只能利用长连接,轮询来模拟server push
    请问这个长连接要怎么实现。我的想法是每过一秒由服务器向浏览器推送一次数据。
      

  7.   

    你看看这个,comet,相当于长轮询.
    http://topic.csdn.net/u/20091223/17/540f7814-5e14-422f-b146-c5868164ec3d.html
    我说了大致原理,楼下有哥们写出了代码事例.
    其实这个东西没什么用的.除非你服务器够牛.
    如果按你说的每秒服务器推送给浏览器,你就相当于用客户端,每秒ajax send http request到服务器.没有客户端(http)请求就没有服务器(http)返回,这是b/s的方式,改变不了.
      

  8.   

    谢谢,ajax每秒请求这个我会,就是听说由服务器推送数据的话更快一些,想试试。
      

  9.   

    如果客户端允许,就用flex吧, , 。虽然不绝对地解决问题, 但已经很接近了