在我的智慧结束睡觉()

时间:2010-03-01 01:40:11

标签: php

我已经在一个循环中睡眠(n),该循环旨在定期循环输出。

但是当我运行循环时,没有任何事情发生,直到预期的循环持续时间中的所有秒数共同累积,之后所有输出都会立即溢出。

帮助。感谢。

4 个答案:

答案 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()。

http://us3.php.net/manual/en/function.flush.php