在网站的优化中如果将IP地址转成整形来存储的话,可以大大的降低数据库的索引时间,而且还节省了很多的服务器资源。在php中,可以借助内置的预设函数 ip2long() 和 long2ip() 来实现IP地地数据类型的转换,但需要要注意的是 ip2long() 和 long2ip() 只能实现IPV4地址的处理!
php ip2long() 函数详解
ip2long:将 IPV4 地址转换成长整型数字!参数:$ip_address 为 IPV4 地址
语法:
ip2long($ip)
long2ip() 函数详解
long2ip:将长整型数字转化为标准的IPV4地址!参数:$proper_address 要转换的长整型数字
语法:
long2ip($proper_address)
ip2long() 转换后的负数问题
当ip地址比较大时,转换后的整数会有超过最大整形范围(也就是溢出)的情况。而超过的部份就会成为负数,为避免此情况的出现我们需要对 ip2long() 的结果进行处理一下!
解决方法如下
/**
* 使用ip2long() 转换后的负数问题
*/
public function index()
{
$access_ip ='14.205.4.147'; //获取客户端IP
//处理方法一
$strip = bindec(decbin(ip2long($access_ip))); //decbin函数将十进制转换为二进制,bindec函数将二进制转换为整形。
$ip = long2ip($strip);
//处理方法二
$strip_1 = sprintf("%u", ip2long($access_ip));
$ip_1 = long2ip($strip_1);
$this->writeJson(200, [$ip, $strip, $ip_1, $strip_1], "{$access_ip}:IP整型互转");
return false;
}
执行输出结果
{
"code": 200,
"result": ["14.205.4.147", 248317075, "14.205.4.147", "248317075"],
"msg": "14.205.4.147:IP整型互转"
}
本文为够意思原创文章,转载无需和我联系,但请注明来自够意思博客blog.go1s.cn:够意思博客 » PHP IP转换整形(ip2long)的详解