问题1:使用了ob_start(),未调用ob_end_flush()或flush(),仍然输出<?php
ob_start();
echo "this is test string a<br />"; 
echo "this is test string b<br />";  
?>浏览器仍然输出两个测试测字符串。问题2:无法再现ob的经典示例,每隔1秒输出1个字符<?php
for ($i=10; $i>0; $i--)
{
    echo $i;
    ob_flush();
    flush();
    sleep(1); 
}
?>或者:<?php
ob_end_clean();
for ($i=10; $i>0; $i--)
{
    echo $i;
    flush();
    sleep(1); 
}
?>或者:<?php
ob_start();
for($i=0; $i<300; $++)
{
    echo " ";
}
for ($i=10; $i>0; $i--)
{
    echo $i;
    flush();
    sleep(1); 
}
?>都是等待10秒钟一起输出,而不是每隔1秒输出一次,为什么?

解决方案 »

  1.   


    <?php
    for ($i=10; $i>0; $i--)
    {
        echo "输出内容太短,把输出内容设置长一点,缓存区无法容纳,就自动输出了".$i;
        ob_flush();
        flush();
        sleep(1); 
    }
    ?>
      

  2.   

    第一段代码:
    绝对输出,虽然没有ob_end什么的,但是你的文件只有这两个语句,在PHP解释器运行后(运行完这个PHP代码后),会自动输出的。
      

  3.   

    后面的因为只是在服务器里面sleep,现在我还没弄清楚sleep是怎样运行的,无法作答。
      

  4.   

    也可能是浏览器的关系,我刚开始拿傲游测试ob实时输出,怎样都不行(可能哪边要改下设置吧),换了ie和firefox,马上就变实时输出了。我一般是在代码前加
    ob_end_flush();
    ob_implicit_flush(1);
    这2句就行了。