php中ip2long与long2ip函数详解

生活没有真正的完美,只有不完美才是最真实的美;生活没有一帆风顺的,只有披荆斩棘才能路路顺;生活没有永远的成功,只有在挫折中站起才是真正的成功,只有闪光的人生才算是生命的永恒。

在网站的优化中如果将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其它相关文章!

您可能有感兴趣的文章
php get_magic_quotes_gpc()函数介绍与用法

php取消运行时间限制的方法

php中ini_set函数介绍

php获取文件夹下所有文件/文件夹

php如何实现文件下载的方法