IP地址函数ip2long
ip2long — 将 IPV4 的字符串互联网协议转换成长整型数字
ip2long() 转出来的数值应该都是正整数, 但是在某些机器转出负数, 刚开始以为是 PHP 版本问题, 后来做些测试, 确定是系统版本 32bits 和 64bits 的问题.
32 bits ip2long(): -2147483648 ~ 214748364764
64 bits ip2long(): 0 ~ 42949672945 测试
ip2long() 于 32bits 的系统测试
ip2long(‘127.255.255.255’); // 2147483647 = 十进制的最大值
ip2long(‘255.255.255.255’); // -1
ip2long(‘255.255.255.254’); // -2
ip2long(‘192.168.1.2’); // -1062731518ip2long() 于 64bits 的系统测试
ip2long(‘127.255.255.255’); // 2147483647 = 十进制的最大值
ip2long(‘255.255.255.255’); // 4294967295
ip2long(‘255.255.255.254’); // 4294967294
ip2long(‘192.168.1.2’); // 3232235778解决办法
解法1 – 自己转换
<?php
function iptolong($ip)
{
list($a, $b, $c, $d) = split('\.', $ip);
return (($a * 256 + $b) * 256 + $c) * 256 + $d;
}
?>ip2long实现
long2ip实现
其他情况
Last updated