Но есть некоторые особенности ее использования в x32/x64. Допустим, для его хранения мы выделяем INT ячейку в БД.
Результат функции на x32:
ip2long(127.127.127.127) = 2147483648
ip2long(255.255.255.255) = -2147483648
Результат функции на x64:
ip2long(127.127.127.127) = 2147483648
ip2long(255.255.255.255) = 4294967296
Получается что 4294967296 не запишется в БД, так как ячейка в нашей БД типа INT и максимальное число, которое можно в нее записать: 2147483648.
Потому добавляем для атрибут UNSIGNED, который позволяет записывать в БД диапазон чисел от 0 до 4294967296.
Но как же быть с x32? Ведь в ней функция ip2long может вернуть отрицательное значение. Для решения этой проблемы нужно обрабатывать результат перед записью БД:
$ip = sprintf('%u', ip2long($ip)); // возвращает строку с положительным значением
Это совсем не решает проблемы ранжировки диапазона-адрессов и хранения ipv6
ОтветитьУдалитьhttp://www.highonphp.com/5-tips-for-working-with-ipv6-in-php
УдалитьВерно. Но целью данной заметки было рассказать об особенностях функции ip2long с которыми я столкнулся в ходе ее использования, а не учить работать с IP адресами.
Удалить