无限循环使我的页面加载

时间:2012-05-05 06:16:16

标签: php

我有一个应该是无限函数的函数,但是当我启动它时它会继续加载。在这种情况下,当我在set_time_limit中指定21时,他会持续70-79秒左右。

当我开始时它没有做任何事情,当那些75秒完成时它会突然显示8倍的日期差异。一次全部。我希望它每隔1秒显示一次我的文字,而不是长达1小时 我下面的所有数值都低于我上面说的数字因为我认为1秒可能会快但但仍然滞后10秒

set_time_limit (21);
// 21 seconds until its done should become an hour later
// this was to test 
$x=1;
$startTime = time();
$timeout = 10;   //timeout in seconds
for ($i=0;;$i++)
{
   if(time() > $startTime + ($x * $timeout)) {

     $x++;
     $today=date('d-m-Y H:i:s');
     echo "it's now: ". $today . "</br>";
     $newyear = date('d-m-Y H:i:s', mktime(0, 0, 0, 01, 01, 2013));
     $difference=get_datediff_string($vandaag,$nieuwjaar); 
     // get_datediff_string() is defined somewhere below,
     // but wasn't worth to show it.
     echo "it is $difference untill newyear"; 

   }
}

3 个答案:

答案 0 :(得分:1)

为什么不使用usleep暂停脚本?为什么你的目标是一个小时?在我看来,你应该在JavaScript中这样做..

<?php
$x=1;
$startTime = time();
$timeout = 10;   //timeout in seconds
for ($i=0;;$i++)
{

   set_time_limit (10);
   usleep(1000);

   $x++;
   $today=date('d-m-Y H:i:s');
   echo "it's now: ". $today . "</br>";
   $newyear = date('d-m-Y H:i:s', mktime(0, 0, 0, 01, 01, 2013));
   $difference=get_datediff_string($vandaag,$nieuwjaar); // get_datediff_string() is defined somewhere below but wasn't worth to show it.
   echo "it is " . $difference . " untill newyear"; 
   flush();

}

答案 1 :(得分:0)

这是由隐式缓冲引起的。它可能在服务器端(在这种情况下只需在flush()之后调用echo来修复它),或者它可能在浏览器上(在这种情况下你运气不好)。

这种脚本无论如何都应该是一个控制台程序,我真的没有看到你在浏览器环境中做的事情。

答案 2 :(得分:0)

如果您希望每隔$ timeout超时打印一次,请考虑在循环结束时使用sleep($ timeout),这样循环将在两个打印日期之间运行数千次,从而导致滞后问题。 / p>

最后我认为这个脚本在服务器端是无用的,如果你想要显示新年的倒计时,请在javascript中进行。