问题时这样的,我循环定义了一个5000字节的字符串变量outText, 然后循环echo '<!--'.$outText."-->\n"; 每次echo完了紧接着我要调用setDownProgress()这个js函数处理页面上的一些事情,目的是先向客户端传送5000字节,等客户端收到了,然后再调用setDownProgress(),现在问题在于,我在有的服务器空间上测试的结果是 $outText的5000字节内容不需要从服务器端传送到客户端就可以在客户端的页面上显示出来,而有的服务器空间上测试则 $outText的5000字节内容是需要从服务器端传送到客户端后 setDonwProgress()才执行,这是为什么,是服务器端php的运行方式有不同嘛?
我是php小白,想自己写个脚本测试服务器到本地的网速,脚本在有的空间上是正常的,有的则出现上述的问题。$outText = getTestText();
for($i = 1;$i<100;$i++){
echo '<!--'.$outText."-->\n";
echo "<script type=\"text/javascript\">setDownProgress();</script>\n";
}function getTestText(){
$result;
for($i = 0;$i<5000;$i++){
$result .= '*';
}
return $result;
}

解决方案 »

  1.   

    只能告诉你:
    echo  是在服务器端执行。
    setDownProgress()是js函数,客户端执行。
      

  2.   

    这个我明白,请看我的代码,echo 在服务器端执行,但是'<!--'.$outText."-->\n" 是会在客户端显示的,$outText的值会从服务器端传送到客户端的。
      

  3.   

    请认真阅读 flush、ob_flush 函数说明
      

  4.   

    这个是缓冲问题,涉及php.ini的设置(output_beffering),web服务器的设置(zip压缩开启)
    试试
    <script>
    function setDownProgress()
    {
            document.writeln("Hello world")
    }
    </script>
    <?php
    apache_setenv('no-gzip', 1); 
    ini_set('zlib.output_compression', 0); 
    ob_start();
    $outText = getTestText();
    for($i = 1;$i<100;$i++){
            echo '<!--'.$outText."-->\n";
            echo "<script type=\"text/javascript\">setDownProgress();</script>\n";
            ob_flush();
            flush();
            sleep(1);
    }
    ob_end_clean();function getTestText(){
            return str_pad(" ",ini_get('output_buffering'));
    }
    ?>
      

  5.   

    如果apache是由nginx代理的话,需要在proxy.conf里配置proxy_buffering = Off;
    这东西慎用,和具体服务器环境挂得比较紧密。
    你用ajax轮询的方式比较好。