什么时候PHP不能一次输出页面?

时间:2016-05-06 01:28:21

标签: php html

这里有些奇怪,我会输出一个页面并逐个显示,直到所有内容都被加载(类似于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>';

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

3 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:5)

它缓冲输出并仅在页面加载完成后发送它,或者在缓冲几千字节之后发送。您可以通过在ob_start()ob_end_flush()中完整包装代码来控制此功能,或者在这种情况下,在每次睡眠前调用flush()

更多信息:What is output buffering?

答案 2 :(得分:1)

php是服务器端。您是否尝试使用javascript&#39; setTimeout()函数?

这是一个在5秒延迟后重复10次的字符串示例。

<script>
setTimeout(test, 5000);

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