0

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

当我开始时它什么也没做,当这 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"; 

   }
}
4

3 回答 3

1

为什么不使用 ausleep来暂停脚本?为什么你的目标是一个小时?在我看来,您应该宁愿在 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();

}
于 2012-05-05T06:31:06.037 回答
0

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

无论如何,这种脚本真的应该是一个控制台程序,我真的不明白你在浏览器上下文中所做的事情的意义。

于 2012-05-05T06:19:28.827 回答
0

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

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

于 2012-05-05T06:25:36.000 回答