PHP什么时候不同时输出页面


When does PHP not output the page all at once?

这里有一些奇怪的地方,我认为这会输出一个页面并逐部分显示,直到所有内容都加载完毕(类似于Wordpress更新/重新安装过程的工作方式):

<html>
<body>
<?php
for( $i=0; $i<100; $i++)
{
    echo 'HELLO';
}
sleep(10);
echo '<p></p>';
for( $i=0; $i<100; $i++)
{
    echo 'THERE';
}
sleep(10);
echo '<p></p>';
for( $i=0; $i<100; $i++)
{
    echo 'HOW ';
}
sleep(10);
echo '<p></p>';

for( $i=0; $i<100; $i++)
{
    echo 'ARE U';
}
sleep(10);
echo '<p></p>';

奇怪的是,它等待整个页面,然后显示它。什么变量/配置会影响这种行为?

我不知道你认为php是如何工作的,但它只是服务器端,你希望在客户端进行部分更新。PHP不是那样工作的。

当您调用该php脚本时,php解释器开始执行它,将输出放入临时位置,然后使用sleep函数,php解释器等待,直到达到毫秒,然后继续执行,在临时位置连接输出,然后继续…所有脚本执行完后,php将整个输出发送到客户端。

如果您需要对页面进行部分更新,则需要进入异步调用和ajax的世界。

它缓冲输出,并且只在页面加载完成时发送,或者在缓冲了几KB之后发送。您可以通过将代码完全封装在ob_start()ob_end_flush()中来控制此功能,或者在本例中,在每次睡眠前调用flush()

更多信息:什么是输出缓冲?

php是服务器端。你用javascript的setTimeout()函数试过这个吗?

下面是一个字符串的例子,它在5秒延迟后重复了10次。

<script>
setTimeout(test, 5000);
function test(){
    for (var i=0;i<10;i++){
    document.write("test <br />");
    }
}
</script>