4

这是我在 stackoverflow 上的第一个问题,我只是好奇.. 是否可以在 PHP 中延迟循环?我正在尝试将每个结果打印到浏览器并在处理另一个循环之前使用 sleep() 暂停脚本,但它不起作用,这是我使用的脚本:

<?php
$n = 1;

while ($n < 10) {
    echo $n."<br />";
    $n++;
    sleep(1);
}
?>

PS:我在 Linux Mint 上使用 Firefox 和 Apache2。

4

2 回答 2

12

服务器通常会缓冲服务器端脚本的输出,直到其中有足够的输出尝试类似这样的东西。设置输出缓冲关闭和手动刷新缓冲区的组合。注意 implcit flush 行以及 flush 和 ob_flush 行。

<?php 
@ini_set("output_buffering", "Off");
@ini_set('implicit_flush', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('max_execution_time',1200);


header( 'Content-type: text/html; charset=utf-8' );


echo "Testing time out in seconds\n";
for ($i = 0; $i < 1150; $i++) {
    echo $i." -- ";

    if(sleep(1)!=0)
    {
        echo "sleep failed script terminating"; 
        break;
    }
    flush();
    ob_flush();
}

?>
于 2013-02-23T02:18:17.143 回答
0

PHP 在页面呈现其内容之前完全执行并呈现其输出。所以不,你不能像你想要的那样延迟 PHP 循环。

您可以并且应该使用 javascript 来执行此操作。如果您需要像这样延迟打印的来自服务器的信息,您可以使用 AJAX 在服务器可用时从服务器中提取信息。

于 2013-02-23T02:16:39.670 回答