За последние 24 часа нас посетили 32936 программистов и 1756 роботов. Сейчас ищут 848 программистов ...

О банах

Тема в разделе "Прочие вопросы по PHP", создана пользователем Psih, 10 мар 2007.

  1. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    он вернет тебе одну строку (минимум) со всеми полями (столбцами) твоей таблицы так как ты делаешь SELECT * FROM blocks
    согласен с DarkElf
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Вообщем я лично решил эту проблему раз и навсегда и без лишних запросов к базе данных.
    PHP:
    1. <?php
    2. /*
    3. * 1 в memcache означает что бана нет
    4. * 2 - означает что бан есть
    5. * $announce = true/false - собственно announce скрипт это или WEB часть трекера
    6. * $nip - integer представление IP адреса
    7. */
    8. $nip = ip2long($ip);
    9. $banned = $mem->get('ban'.$nip);
    10. if ($banned === false){
    11.     $res = mysql_query('SELECT * FROM bans WHERE first <= '.$nip.' AND last >= '.$nip);
    12.     if (mysql_num_rows($res)){
    13.         $mem->set('ban'.$nip, 2);
    14.         $banned = 2;
    15.     }else{
    16.         $mem->set('ban'.$nip, 1);
    17.         $banned = 1;
    18.     }
    19. }
    20. if ($banned == 2){
    21.     if ($announce === true){
    22.         header("HTTP/1.0 403 Forbidden");
    23.         die('You are banned! Write to [email=banlv@mail.ru]banlv@mail.ru[/email] for any questions.');
    24.     }else{
    25.         header("HTTP/1.0 403 Forbidden");
    26.         header('Content-Type: text/html; charset=windows-1251');
    27.         die('Сообщение о бане в HTML варианте');
    28.     }
    29. }
    30. ?>
    это в dbconn функции движка TBDev. В скрипте управления банами снятие/установка бана записываеться так-же и в memcache, что бы бан действовал немедленно.