生活没有真正的完美,只有不完美才是最真实的美;生活没有一帆风顺的,只有披荆斩棘才能路路顺;生活没有永远的成功,只有在挫折中站起才是真正的成功,只有闪光的人生才算是生命的永恒。
在网站的优化中如果将IP地址转成整形来存储的话,可以大大的降低数据库的索引时间,而且还节省了很多的服务器资源。在php中,可以借助内置的预设函数 ip2long() 和 long2ip() 来实现IP地地数据类型的转换,但需要要注意的是 ip2long() 和 long2ip() 只能实现IPV4地址的处理!
php ip2long() 函数详解
ip2long:将 IPV4 地址转换成长整型数字!
语法:
ip2long($ip_address)
参数:$ip_address 为 IPV4 地址
示例:
<?php $ip = '127.168.0.125'; //echo ip2long($ip); // 2141716605 $ip2 = '192.0.34.166'; echo ip2long($ip2); //3221234342 (64位系统下输出) //-1073732954 (32位系统下会输出负数) ?>
php long2ip() 函数详解
long2ip:将长整型数字转化为标准的IPV4地址!
语法:
long2ip($proper_address)
参数:$proper_address 要转换的长整型数字
示例:
<?php $ip = '127.168.0.125'; $ipstr = ip2long($ip); echo long2ip($ipstr); // 127.168.0.125 $ip2 = '192.0.34.166'; $ipstr2 = ip2long($ip2); echo long2ip($ipstr2); // 192.0.34.166 ?>
ip2long() 转换后的负数问题
当ip地址比较大时,转换后的整数会有超过最大整形范围(也就是溢出)的情况。而超过的部份就会成为负数,为避免此情况的出现我们需要对 ip2long(0 的结果进行处理一下!
处理方法1:
示例代码:
<?php $ip = "192.0.34.166"; $strip = bindec(decbin(ip2long($ip))); //这里通过二进制进行处理一下 echo $strip; // 将整数类型转成IPV4 echo long2ip($strip); ?>
注:decbin函数将十进制转换为二进制,bindec函数将二进制转换为整形。
处理方法2:
使用类C的sprintf方法来避免 ip2long 出现负数的问题
示例代码:
<?php echo sprintf("%u\n", ip2long("157.23.56.90")); // 2635544666 ?>
以上就是php中ip2long与long2ip函数详解。我们一直都在练习微笑,终于变成不敢哭的人。早上好!更多关于php中ip2long与long2ip函数详解请关注haodaima.com其它相关文章!