PHP - 为什么flush(和/或ob_flush)不起作用?

时间:2014-12-28 17:12:07

标签: php loops for-loop sleep flush

自我解释但不工作......

只想每1秒回复$ j ......

ob_implicit_flush();
ob_end_flush();
ob_start();

for ($j=0;$j<=9;$j++){
    echo $j.'<br>';
    flush();
    ob_flush();
    sleep(1);
}

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

PHP的缓冲区只是其中之一。

服务器可能正在缓冲输出,而某些浏览器会缓冲输入,因此它不会尝试为接收到的每个字节重新呈现整个页面。

作为一般规则,您应该从不在浏览器将调用的任何内容中使用sleep,因为这只是要求被DoS攻击,真的......

所以基本上这个答案是告诉你“不要那样做”。肯定有更好的方法来做你正在做的事情,从简单的JavaScript开始:

<div id="counter"></div>
<script type="text/javascript">
    (function() {
        var count = 0, box = document.getElementById('counter');
        function step() {
            box.appendChild(document.createTextNode(count));
            box.appendChild(document.createElement('br'));
            count++;
            if( count <= 9) setTimeout(step,1);
        }
        step();
    })();
</script>