Преобразование ip в integer

1. Димон (09.08.2009 / 22:06)
Необходимо преобразовать ip в integer тип спомощью функции ip2long ,но она бывает выдает отрицательное значение. Где то видел как это исправляют, но не могу найти. Подскажите плиз?

2. Димон (09.08.2009 / 22:14)
Нашел smile
$ip = ip2long($_SERVER['REMOTE_ADDR']);
if($ip < 0) $ip += 4294967296;


3. Вусал (10.08.2009 / 15:10)
или просто
$ip = (int)$ip;

4. Димон (10.08.2009 / 18:03)
3. неа
у тип integer максимальное значение 2147483647

5. Максим (10.08.2009 / 18:06)
я ваще делаю что-то вроде этого
function get_int_ip($ip) {
	$ips = split("\.", $ip);
	return $ips[3] + $ips[2] * 256 + $ips[1] * 256 * 256 + $ips[0] * 256 * 256 * 256;
}


6. Димон (10.08.2009 / 18:11)
5. читай 2й пост
если нужно обратно из int в ip функция long2ip()

7. Сергей (10.08.2009 / 18:23)
3, (int) возвращает отрицательное значение, если число отрицательное, а чтобы получить модуль числа юзай abs()

8. Димон (10.08.2009 / 18:52)
7. про модуль верно, но вот что получается:
$ip = "192.168.100.68";
$ip = ip2long($ip);
if($ip<0) $ip = abs($ip);
echo long2ip($ip);
скрипт выводит 63.87.155.188 значит модуль нельзя использовать.
с проблемой разобрался еще во 2 посте.
тему можно закрывать

9. Вусал (16.08.2009 / 00:03)
или как делает Вантуз
$ip = explode('.', $_SERVER['REMOTE_ADDR']);
$ips = $ip[0].$ip[1].$ip[2].$ip[3];

10. PLEEROCK (16.08.2009 / 18:45)
a просто заменить точку западло? гг

11. Phantom (17.08.2009 / 11:24)
ТАЛЫШ, так нельзя делать. Смотри что получается. Два фактически разных IP дадут одинаковый конечный результат: 11.22.33.44 и 1.122.33.44 . ну и как следствие данный способ не обратим. Во втором посте самый правильный вариант.

URL: https://visavi.net/topics/318