Php, сравнение Ip (вопрос)

Discussion in 'PHP' started by Химический_Ёжик, 5 Mar 2007.

  1. Химический_Ёжик

    Joined:
    9 Jan 2007
    Messages:
    9
    Likes Received:
    3
    Reputations:
    8
    Здраствуйте...
    Подскажите пожалуйста как можно проверить принадлежит ли ip адрес заданному диапазону?

    PHP:
    <?
    $s="$REMOTE_ADDR";
    if (?????) {
    echo 
    "yes!"
    }
    else {
    echo 
    "No!";
    ?>
    Если криво задал вопрос, скажите- перефразирую :))
    сорри за глупые вопросы, умные пока придумать не могу... :confused:
     
    #1 Химический_Ёжик, 5 Mar 2007
    Last edited: 5 Mar 2007
    3 people like this.
  2. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    611
    PHP:
    $check_ip explode('.'"127.0.0.2");
    $user_ip explode('.'$_SERVER['REMOTE_ADDR']);
    for(
    $i=0;$i<4;$i++){
        if ((
    $check_ip[$i] == $user_ip[$i]) OR  $check_ip[$i] == "*"$do true;
        else {
    $do false; break;  }
    }
    if(
    $do) echo 'yes';
    else echo 
    'no';
     
    1 person likes this.
  3. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    пусть $d1 и $d2 - диапазоны в виде "x.x.x.x" (например 1.2.3.4 - 1.2.3.100)
    переводи их в числа (4-байтные как бы) чтобы небыло никаких точек. просто числа.
    далее переводи в такое же число заданый адрес, и если
    конец_диапазона >= заданый_адрес >= начало_диапазона
    то yes, иначе нет.


    UPD
    поскольку коллега Green_Bear успел написать ответ быстрее меня, читай его код (правда я неуверен что он правильный)
     
    #3 KEZ, 5 Mar 2007
    Last edited: 5 Mar 2007
  4. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    надо было уточнить как задан диапазон
    уточняй сразу что нужно и пиши пример так:
    PHP:
    <?
    $d1 "1.2.3.4"$d2 "1.2.3.10"# или по другому, как хотел то?

    $s=$_SERVER["REMOTE_ADDR"]; # так правильнее
    if (?????)
    {
    echo 
    "yes!"
    }
    else
    {
    echo 
    "No!";
    # забыл "}"
    ?> 
     
  5. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    611
    кез, а чо там не правильного? поставить * за место цифры =)) например 127.0.*.*
    и все =\
    правда я не учел, что твое... например 127.0.0.1 - 127.0.0.15 =\
    но это уже надо более точно узнать у автора топика, что ему конкретно надо.
     
  6. TaNkist

    TaNkist Elder - Старейшина

    Joined:
    6 Apr 2006
    Messages:
    147
    Likes Received:
    47
    Reputations:
    19
    PHP:
    $text="$REMOTE_ADDR";
    $text=strrev($text);
    $last =strchr($text".");
    $last =strrev($last);
    if (
    $last=="127.0.0.") {
    echo 
    "yes!"
    }
    else {
    echo 
    "No!";
     
  7. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2GreenBear твой код неправильный. сравнивать символы на равенство?)
    2TaNkist это вообще что?
    2BlackLogic а это что?
    --
    вообще советую перечитывать свои сообщения перед постом.
    ЗЫ сегодня победил кез.
     
    2 people like this.
  8. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    611
    покажи правильное.
     
  9. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    тк в пхп тип Integer по-умолчанию знаковый и ip2long может вернуть отрицательное значение, то делаем так:
    самому не нравится...
     
    #9 ZaCo, 5 Mar 2007
    Last edited: 5 Mar 2007
    1 person likes this.
  10. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    611
    ну у каждой задачи есть множесвто решений. так что если ты делаешь по другому, то не значит что у других не правильно :)
    другое дело, что я вопрос не правильно понял =). .. как уже написал выше.
     
    1 person likes this.
  11. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,148
    Reputations:
    430
    2 GreenBear
    Нет... Как раз у него всё правильно.
    Блин, только допечатал, а он уже написал.
    Свой пример удалил.
     
    #11 Ch3ck, 5 Mar 2007
    Last edited: 5 Mar 2007
  12. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    611
    ну хорошо я буду делать только так, как делает зако. п***ец
     
    #12 GreenBear, 5 Mar 2007
    Last edited by a moderator: 6 Mar 2007
  13. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,148
    Reputations:
    430
    Причём тут делать как он?
    Всякие там функции типа
    _http://php.net/ip2long
    _http://php.net/long2ip
    использовать намного правильнее нежели эм.м.. другое...вот.
     
    #13 Ch3ck, 5 Mar 2007
    Last edited by a moderator: 6 Mar 2007
  14. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    611
    мда... у меня работает код? - да. тогда хули вы прикопались как он работает? =((
    оцтаньте.
    как хачу, так и пешу.
     
  15. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    374
    Reputations:
    460
    Правильно, у каждого своя монера писать код, у кого он большой у мого вобще маленький, кто любит классы кто нет)))
     
  16. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,148
    Reputations:
    430
    PHP:
    <?php
    function checkIPorRange ($ip$ip_address) {
        if (
    ereg("-",$ip_address)) {
            
    $ar explode("-",$ip_address);
            
    $your_long_ip ip2long($ip);
            if ( (
    $your_long_ip >= ip2long($ar[0])) && ($your_long_ip <= ip2long($ar[1])) ) {
                return 
    TRUE;
            }
        } else {
            if (
    $ip == $ip_address) {
                return 
    TRUE;
            }
        }
        return 
    FALSE;
    }
    $ip_range "210.100.55.25-214.43.244.17";

    if (
    checkIPorRange($_SERVER["REMOTE_ADDR"], $ip_range)) echo  "принадлежит!";
    else echo 
    "Нееет";
    ?>
    Блин, никто не накого не наезжаетъ, и ничего не говорит про его код. Сказали как правильнее...
     
    #16 Ch3ck, 5 Mar 2007
    Last edited: 5 Mar 2007
  17. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2BlackLogic код у тебя некорректный ;)
     
  18. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,148
    Reputations:
    430
    Мне плохо уже...
    Пусть он любой берёт. Все примеры работают.
     
  19. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    >>Пусть он любой берёт. Все примеры работают.
    твой код НЕ работает, потому что например 10>-9, но сдвинем по кругу и что тогда? ;)
     
  20. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,148
    Reputations:
    430
    Вот у меня щас лицо такое же как на аве.
    У меня всё работает прекрасно. В чём проблема-то. Объясни тогда подоступнее...
     
    #20 Ch3ck, 5 Mar 2007
    Last edited: 5 Mar 2007
Loading...