2012-05-25 2 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'); 
} 
Смежные вопросы