PHP - 睡眠错误()

时间:2014-03-29 20:59:59

标签: php delay sleep

我在PHP中遇到了sleep()函数的一些问题。

<?php
echo date('h:i:s') . "<br>";

//sleep for 5 seconds
if(1 == 1){
sleep(5);

//start again
echo date('h:i:s');
}
?>

当我运行此代码时,我会暂停5秒钟,然后将两个日期粘贴在一起,而不是一个日期,5秒暂停,然后是下一个日期。

我有没有其他方法可以写这个,所以它能正常工作吗?

2 个答案:

答案 0 :(得分:4)

// turn off all layers of output buffering, if any
while (ob_get_level()) {
    ob_end_flush();
}
// some browsers tend to buffer the first N bytes of output, refusing to render until then
// give them what they want...
echo str_repeat(' ', 1024);

echo date('h:i:s') . "<br>";
// force php to flush its output buffers. this also TRIES to tell the webserver to flush, but may not work.
flush();

sleep(5);

echo date('h:i:s');
flush();

通过在每次调用flush()之前回显更多空格,可以提高健壮性。我之所以这么说,是因为服务器和用户浏览器之间可能存在多层软件,并且这些层中的任何一层都可能决定缓冲,直到它获得足够的数据来发送它感觉是合理大小的网络帧。用空格填充可能有助于破坏缓冲。

答案 1 :(得分:0)

你需要输出缓冲区!尝试在顶部使用ob_start,并在每个sleep之后使用flush

示例1

ob_start();
echo date('h:i:s') . "<br>";

//sleep for 5 seconds
if(1 == 1){
    sleep(5);
    flush();
    ob_flush();

    //start again
    echo date('h:i:s');
}

示例2

ob_implicit_flush(true);
echo date('h:i:s') . "<br>";

//sleep for 5 seconds
if(1 == 1){
    sleep(5);

    //start again
    echo date('h:i:s');
}