php long2ip,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

?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值