Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保持张贴编号与PHP声明保持一致_Php_Javascript - Fatal编程技术网

保持张贴编号与PHP声明保持一致

保持张贴编号与PHP声明保持一致,php,javascript,Php,Javascript,我正在寻找的东西,显示在每一行的数字,而不仅仅是页面加载后的所有数字。 例如,代码是: for($a=0;$a<=10;$a++){ echo $a; echo '<br>'; } for($a=0;$a您可以强制php刷新其输出。当然,如果启用,这将只将其刷新到输出缓冲区中 一旦PHP刷新,就不能保证直接进入浏览器,PHP会刷新到web服务器,而web服务器会根据web服务器自身的配置将其发送到浏览器 但是,就PHP而言,以下功能将起作用(至少在命令行上,或者在您的Web服

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

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

for($a=0;$a您可以强制php刷新其输出。当然,如果启用,这将只将其刷新到输出缓冲区中

一旦PHP刷新,就不能保证直接进入浏览器,PHP会刷新到web服务器,而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);
}
应显示1…2…3…之间有一秒的延迟

Ed:另一个我想的事情。即使Web服务器在你从PHP刷新时“流”你的输出,如果你的输出处于其他标记的中间,用户的浏览器在收到整个响应之前可能不会渲染任何东西。 也就是说,如果您正在做一些基本的工作,我已经使用上述策略为长时间运行的实用程序脚本输出状态。在这种情况下,我甚至可能没有在输出中包含标记,但它的工作方式与您希望的一样(至少在我当时处理的服务器上)


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

这里有一个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>

计数页
旧体变异;
函数countTo(a,b)
{
if(oldbody==null)
{
oldbody=document.body.innerHTML;
document.body.innerHTML='';
}

如果(a)我认为最好使用javascript进行此类操作,而不是服务器端任务,即使使用flush()也是如此在页面加载完成之前,您可能看不到输出。与@user482594一致,这只能在客户端可靠地完成,最有可能是使用Javascript。其中有太多的原因导致它可能无法工作,使它基本上毫无用处(仅说是全部):-)我在解释中遗漏了任何主要原因吗?每次我看到它不起作用都是因为PHP和客户端之间有某种东西可以自己进行缓冲。根据我的经验,它实际上可以在大多数mod_PHP设置中起作用(尽管我不能说我已经尝试了几年)。另外:如果Dagon没有否决这个答案,我希望任何人都能说出原因。这不是PHP,而是JavaScript。问题是,在PHP中不能可靠地执行类似的操作。PHP只控制服务器上发生的事情,你不能用PHP在客户端上获得这一级别的细节。你可以稍微模拟一下,用e缓冲区,但这不是一种可靠的方法。
<?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>