2012-05-05 43 views
0

我有一個應該是無限函數的函數,但是當我啓動它時,它會一直加載。在這種情況下,他繼續前進70-79秒,而我在set_time_limit中指定了21。無限循環保持我的頁面加載

當我開始時它什麼都不做,當這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

這是由隱式緩衝引起的。它可能在服務器端(在這種情況下,在echo應該修復它之後調用flush()),或者它可能在瀏覽器上(在這種情況下,你運氣不好)。

無論如何,這種腳本確實應該是一個控制檯程序,我真的沒有看到你在瀏覽器上下文中所做的事情。

0

如果您希望在每個$ timeout秒打印日期,請考慮在循環結束時使用sleep($ timeout),因此循環在兩個日期打印之間將不會運行數千次,從而導致滯後問題。

最後,我認爲這個腳本在服務器端是無用的,如果你想顯示新的一年的倒計時,在JavaScript中做。

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(); 

}