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’); // -1062731518
ip2long() 于 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