我在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秒钟,最后再显示另一个日期。请问是否有其他替代的方法,可以让它正确地工作?
// 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()之前添加更多的空格来提高鲁棒性。我这么说是因为服务器和用户浏览器之间可能有许多层软件,其中任何一层都可能决定缓冲,直到它获得足够的数据来发送它认为是合理大小的网络帧。填充空格可能有助于破坏缓冲。
<p>...</p>
(或其他足以确定布局的元素),以使浏览器更有可能立即呈现它 - 尽管可能是完全多余的;-) - VolkerKob_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');
}
sleep()
是一个警告信号。只是猜测:您将if
语句放在那里,因为您的IDE将sleep()
标记为“有味道的”? - VolkerK