2012-05-25 107 views
0

我有時間保存在一個變量是這樣的()值:時間變量,降低延遲

$latest_attempt = 1337980678; 

我想計算一些延遲。

$remaining_delay = time() - $latest_attempt - $delay; 

但是,當我更新瀏覽器時,$remaining_delay的結果不斷增加。

「你必須等待95秒下次登錄嘗試之前」

如果我以後更新幾秒鐘

它做相反它應該做的事情「你下次登錄嘗試之前,你必須等待102秒」 ,而不是增加。我做錯了什麼?我相信我需要用latest_attempt變量來做些事情,但是我找不到任何我使用php的手冊。

+1

你的數學是錯誤的:'($ latest_attempt + $延遲) - 時間()' – Niko

+0

是的。 'time()'是在你的等式中增加的一個正值。所以隨着時間()變得越來越大,你的總和的結果也越來越大。你需要從某些東西中減去'time()'。 – Paulpro

回答

4

我會說,這樣的事情:

$remaining_delay = $latest_attempt + $delay - time(); 
+0

你可能應該解釋爲什麼。 – Brilliand

+2

邏輯?只是一個猜測 –

+0

那麼,這對我來說似乎相當微不足道......「時間」總是在增長,所以你需要從某個常數值中減去它,而不是相反的...... – Pierre

0
$time_since_last = time() - $last_attempt; 

if ($time_since_last <= $delay) { 
    $remaining = $delay - $time_since_last; 
} else { 
    ... good to go ... delay's expired 
} 
0

其餘的延遲是時候堵塞到期的那一刻之間的區別($last_attempt + $delay因爲從$ last_attempt,用戶被阻止一段$延遲)和當前時間(time()) - 因此,正確的公式是:

$remaining_delay = ($latest_attempt + $delay) - time(); 

if ($remaining_delay > 0) { 
    die('Access denied, you need to wait another '. $remaining_delay .' seconds'); 
}