За последние 24 часа нас посетил 17841 программист и 1610 роботов. Сейчас ищут 816 программистов ...

Переконверт айпи

Тема в разделе "PHP для новичков", создана пользователем inline, 29 дек 2010.

  1. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Нашол на сайте php.net функцию для конверта сидр айпи адресов в диапазоны
    PHP:
    1. function cidr($ip_addr_cidr)
    2. {
    3. $ip_arr = explode('/', $ip_addr_cidr);
    4.  
    5. $dotcount = substr_count($ip_arr[0], ".");
    6. $padding = str_repeat(".0", 3 - $dotcount);
    7. $ip_arr[0].=$padding;
    8.  
    9. $bin = '';
    10. for($i=1;$i<=32;$i++) {$bin .= $ip_arr[1] >= $i ? '1' : '0';}
    11.  
    12. $ip_arr[1] = bindec($bin);
    13.  
    14. $ip = ip2long($ip_arr[0]);
    15. $nm = ip2long($ip_arr[1]);
    16.  
    17. $diap['begin'] = ($ip & $nm);
    18. $diap['end'] = $diap['begin'] | (~$nm);
    19.  
    20. return $diap;
    21.  
    22. }
    cidr("188.225.35.0/24");
    с теме, что заканчиваются на ноль работает коректно и без проблем
    а если в конце не ноль cidr("188.225.35.16/24"); - выдает значения с отрицательными знаками
    а для 188.225.35.0/32 (если после слеша 32), то выдает
    на строке
    PHP:
    1. $diap['end'] = $diap['begin'] | (~$nm);
    в чем проблема?


    п/с что значит такое $bin .= $ip_arr[1] >= $i ? '1' : '0'; ?
     
  2. asik

    asik Активный пользователь

    С нами с:
    12 июл 2007
    Сообщения:
    211
    Симпатии:
    0
    значит:
    PHP:
    1.  
    2.   if ($ip_arr[1] >= $i)
    3.   {
    4.     $bin = $bin . '1';
    5.   }else
    6.   {
    7.     $bin = $bin . '0';
    8.   }
    9.