使用for语句PHP保持在线发布数字


Keep posting number on line with for statements PHP

我正在寻找显示每行数字的东西,而不仅仅是页面加载后的所有数字。示例代码为:

for($a=0;$a<=10;$a++){
echo $a;
echo '<br>';
}

输出当然是:12页面加载后一直到10,但我想把它展示出来1然后2,不用浏览器加载所有内容。

我想暂停一下,看数字增加

你可以使用flush()强制php刷新它的输出。当然,如果PHP的输出缓冲是启用的,这只会将它刷新到输出缓冲区中。

一旦PHP刷新,它不能保证直接进入浏览器,PHP刷新到web服务器,根据web服务器自己的配置将其发送到浏览器。

然而,就PHP而言,以下将工作(至少在命令行上,或者在您的web服务器上,如果它配置正确):

demo.php

<?php
ob_end_flush(); // make sure output buffering is off
for($i=0;$i<10;$i++){
    echo "{$i}'n"; 
    flush();
    sleep(1);
}

从命令行:

$ php demo.php

应该显示1…2…3.

之间有一秒的延迟。编辑:我又想到了一件事。即使web服务器确实"流"。如果您的输出位于其他标记的中间,则用户的浏览器可能在接收到整个响应之前不会呈现任何内容。

也就是说,如果您在做一些基本的事情,我已经使用了上面的策略来输出长时间运行的实用程序脚本的状态。在这些情况下,我甚至可能没有在我的输出中包含标记,但它像您希望的那样工作(至少在我当时处理的服务器上)。

这种方法对于内部工具来说可能足够好,但是对于最终用户可能看到的任何事情,我都不会依赖于这种技术。

这是一个php脚本,将完成这一点。它不是一个真正的PHP脚本,而是一个用javascript完成相同功能的页面。这使您可以更好地控制客户端浏览器上发生的事情。有了输出缓冲和其他东西,就无法保证浏览器会按照您想要的方式呈现它,而只是用PHP控制输出。

<?php ?>
<html>
    <head>
        <title>
        The Counting Page
        </title>
        <script type="text/javascript">
                var oldbody;
                function countTo(a,b)
                {
                    if(oldbody == null)
                    {
                        oldbody = document.body.innerHTML;
                        document.body.innerHTML = '';
                    }
                    if(a <= b)
                    {
                        elem = document.createElement("div");
                        elem.innerHTML = a;
                        document.body.appendChild(elem);
                        a++;
                        setTimeout('countTo(' + a + ',' + b + ')',1000);
                    }
                    else
                    {
                        document.body.innerHTML = oldbody;
                    }
                }
        </script>
    <head>
    <body onload="countTo(1,10)">
        Here is the body text.
    </body>
</html>