PHP-Sleep()的错误

PHP-Sleep()的错误,php,delay,sleep,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秒,然后是下一个日期 是否有其他方法可以编写此文件,使其正常工作?您需要输出缓冲区!尝试在顶部使用ob\

我对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秒,然后是下一个日期


是否有其他方法可以编写此文件,使其正常工作?

您需要输出缓冲区!尝试在顶部使用
ob\u start
,每次
sleep
a
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');
}
ob_start();
回音日期('h:i:s')。“
”; //睡5秒钟 如果(1==1){ 睡眠(5); 冲洗(); ob_flush(); //重新开始 回音日期('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');
}
ob\u隐式\u刷新(true);
回音日期('h:i:s')。“
”; //睡5秒钟 如果(1==1){ 睡眠(5); //重新开始 回音日期('h:i:s'); }
//关闭所有输出缓冲层(如果有)
while(ob_get_level()){
ob_end_flush();
}
//一些浏览器倾向于缓冲输出的前N个字节,在这之前拒绝渲染
//给他们想要的。。。
回声重复序列('',1024);
回音日期('h:i:s')。“
”; //强制php刷新其输出缓冲区。这也试图告诉Web服务器刷新,但可能无法工作。 冲洗(); 睡眠(5); 回音日期('h:i:s'); 冲洗();

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

这对我很有效;后者是五秒钟后。顺便说一句:通常你应该避免停止你的php实例。除非这只是摆弄浏览器渲染引擎的示例代码,或者您有一个非常特殊的情况,
sleep()
是一个红色标志。胡乱猜测:你把
if
语句放在那里是因为你的IDE将sleep()标记为“臭味”?我模糊地记得有一篇文章建议将部分输出包装在块元素中,如

(或其他决定布局“充分”的东西)为了使浏览器更可能立即呈现它-虽然找不到,但可能是完全多余的;-)@我想我也记得类似的事情。我知道很久以前我一直在玩这个,一些浏览器直到你的div或table等的结束标记才呈现html块。。。收到了。
// 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();