當前分鐘從來不是問題。自去年封鎖您所關心的時間,不以 「什麼時候是」:
block_user.php:
<?php
$now = new DateTime();
write_block_into_database($ip_address, $now->format('Y-m-d H:i:s'));
?>
check_block.php
<?php
$sql = 'SELECT 1 FROM sometable WHERE ip_address=? AND DATE_ADD(blocked_at, INTERVAL 1 HOURS) >= NOW()';
if(get_result($sql, $ip_address)) {
// this address is blocked
} else {
// no recent block found
}
或者,如果您想用PHP做比較:
check_locally.php:
<?php
$sql = "SELECT blocked_at FROM sometable WHERE ip_address=?";
$db_row = get_row($sql,$ip_address);
if ($db_row) {
$blocked = new DateTime($db_row->blocked_at);
$blocked->modify('+1 hour');
$now = new DateTime();
if ($blocked >= $now) {
// still blocked
} else {
// was blocked earlier, no more
}
} else {
// not blocked
}
換句話說:「如果我花時間IP封鎖並增加一個小時,現在還在那個時間點之前?」
實施例:
- 擋在12點48
- 在13:10檢查:12點48 + 1小時= 13點48分,13點48> = 13:10,失敗
- 在15:10檢查:12:48 + 1小時= 13:48,13:48 < 15:10,通過
計時通常與UNIX時間戳,它不會出現此問題的完成。你是如何保持時間的?你還挺需要使出渾身解數來實際碰到這個問題...... – deceze
@deceze好像Y2K –
@Franz H60M非常遠房親戚......! – deceze