Конвертер IP в int и int в IP

Веб программирование Конвертер IP в int и int в IP

Помечено: ,

  • В этой теме 0 ответов, 1 участник, последнее обновление 1 год, 7 месяцев назад сделано Васильев Владимир Сергеевич.
Просмотр 0 веток ответов
  • Автор
    Сообщения
    • #5309
      @admin

      Если у вас имеется, или же вы сами решили начать собирать свою базу IP адресов, например, для определения гео-локации пользователя, вам просто необходимо переводить стандартное представление IP адреса в целочисленное. Например: вам необходимо узнать, из какой страны пользователь с IP адресом 99.123.34.5. И если есть база данных с диапазонами, например 99.123.0.0-99.123.255.255 и мы знаем, что это страна Буки, как нам написать запрос к базе данных, что 99.123.0.0 < 99.123.34.5 < 99.123.255.255? Нужно просто перевести в целочисленное представление. В PHP есть стандартная функция ip2long и функция long2ip, которые делают это автоматически. Но в моей практике были случаи, когда IP адреса туда/обратно небыли равны, т.е. эти функции отрабатывали не правильно. Поэтому учимся сами, вручную, переводить IP.

          /**
          *   99.123.34.5 переводим в его числовой эквивалент
          */
          public static function ip_to_long($ip=''){
      
                  list($o1, $o2, $o3, $o4) = explode('.', $ip);
      
                  return ( 16777216 * $o1 )
                      + (    65536 * $o2 )
                      + (      256 * $o3 )
                      +              $o4;
      
                  /*
                  # в пхп можно делать так
                  return sprintf( "%u", ip2long($ip) );*/
              }
      
          public static function ip_from_long($ip){
              $o1 = intval( $ip / 16777216 ) % 256;
              $o2 = intval( $ip / 65536    ) % 256;
              $o3 = intval( $ip / 256      ) % 256;
              $o4 = intval( $ip            ) % 256;
      
              return $o1.'.'.$o2.'.'.$o3.'.'.$o4;
      
              /*
              # в пхп можно сделать так
              $long = 4294967295 - ($ip - 1);
              return long2ip(-$long);*/
          }

Просмотр 0 веток ответов
  • Для ответа в этой теме необходимо авторизоваться.
×