Пост
Hello :)

PHP

-

Решаем проблему с IP: 127.255.255.255

 

 

Сегодня, один из клиентов, обратился с проблемой, что на его сайте некоторые люди с IP: 127.255.255.255 (Это не нормально так, как, этот IP входит в диапазон локальных).

 

Начал разбираться, в скрипте обнаружил, что IP хранятся в базе данных MySQL, скрипт функцией:
$ip = ip2long($_SERVER["REMOTE_ADDR"]); и отправлял его в базу, далее, полез в MySQL, обнаружил, что на ячейки IP Тип int(11):

 

 

 

Меняем на bigint(11), чтобы ячейка принимала большие числа.

 

 

IP, которые, выше чем 128.0.0.0, превращались в 127.255.255.255

 
Теперь, проблема решена.

  • Serj, 13 ноября 2011
5 комментариев
Avatar
  1. Габриэль Зороастрийский
    Габриэль Зороастрийский
    5 февраля 2016 21:32
    Оказывается функция ip2long() на php для всех IP выше 127.255.255.255 на 32-б системах в выдает отричательные числа а на 64-б - положительные - нужно использовать unsign для 64 и sign для 32
  2. Габриэль Зороастрийский
    Габриэль Зороастрийский
    5 февраля 2016 21:18
    что за бред? long2ip = возвращает отрицательные числа ( по крайней мере на 32 битных ос)
  3. Антон Бандерос
    Антон Бандерос
    17 декабря 2015 04:02
    можно просто сделать unsigned int и не менять на bigint
  4. Игорь Степанов
    Игорь Степанов
    2 января 2014 09:24
    ip2long (127.255.255.255) -> 127*256^3+255*256^2+255*256^1+255*256^0 -> 2147483647 ip2long (255.255.255.255) -> 4294967295 (максимально) в обратную сторону тоже всё элементарно считается. long2ip. Алгоритм Элементарный. Вопрос лишь в скорости наверное... не думай о милли-секундах свысока... )
  5. Александр Волков
    Александр Волков
    5 февраля 2013 03:03
    спс

© SERJ.WS 2011-2021