我有一个应该是无限函数的函数,但是当我启动它时它会继续加载。在这种情况下,当我在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";
}
}
答案 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中进行。