我在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秒暂停,然后是下一个日期。
我有没有其他方法可以写这个,所以它能正常工作吗?
答案 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');
}