我已经在一个循环中睡眠(n),该循环旨在定期循环输出。
但是当我运行循环时,没有任何事情发生,直到预期的循环持续时间中的所有秒数共同累积,之后所有输出都会立即溢出。
帮助。感谢。
答案 0 :(得分:7)
试试:
ob_end_flush (); // just in case
while (1) {
echo 'wait for it<br/>'.PHP_EOL;
flush ();
sleep (2);
}
答案 1 :(得分:4)
也许你需要在每个输出后刷新()输出缓冲区?
答案 2 :(得分:1)
Argh,该网站不允许我对mathroc的最新评论添加评论。所以我会把它放在这里:
它对我不起作用。但是下面的内容真的很奇怪:我不小心偶然发现网上的其他一些睡眠代码,我已经把它放在了我的面前:
<HTML>
<BODY>
$c=0;
while($c <$chunks){
$rand = rand(2000000, 6000000);
echo '<br> . . . sleeping for ' . round(($rand / 1000000),2) . ' seconds . . . zzzzzzzzzzzzzz<br>';
flush();
usleep($rand);
$c++;
}
WHAT I'VE GOT BEGINS HERE:
<br />
<br />
This page is loading.<br />
<?php
for($i=0;$i<5;$i++){
flush(); sleep(2);
?>
Almost there...<br />
<?php
}
?>
<?php flush(); sleep(2); ?>
Done.<br />
</BODY>
</HTML>
...现在,下面的代码块按顺序睡得很好。输出正确交错(而不是在10秒结束时全部到达)。
这很奇怪,因为我不知道上面做了什么会使下面的块中的所有内容都正常工作。如果我删除它,我的块不起作用(即输出累积,然后在结束时集中溢出)。如果我只删除上面代码的一些部分,那么我的东西想要向前跳一点(但顺序输出其余的罚款)。
我不知道前面的代码是做什么的,这使得我的(后一个块)以它应该的方式工作,或者如何缩小它以使它仍然使后一个块完全起作用,或者甚至如何制作上面的代码在页面上不可见,同时仍允许后一个块准确工作。
(我在Windows 7 Caucho Resin PHP 5和Linux Apache CGI-BIN PHP 4平台上测试过该脚本。结果相同。)
答案 3 :(得分:-1)
听起来你应该使用flush()而不是sleep()。