php ip2long为什么会出现负数?怎么解决?
导读:收集整理的这篇文章主要介绍了php ip2long为什么会出现负数?怎么解决?,觉得挺不错的,现在分享给大家,也给大家做个参考。php提供了ip2long与long2ip方法对ip地址处理。1、ip2long — 将一个ipv4的字符串互联...
收集整理的这篇文章主要介绍了php ip2long为什么会出现负数?怎么解决?,觉得挺不错的,现在分享给大家,也给大家做个参考。php提供了ip2long与long2ip方法对ip地址处理。
1、ip2long — 将一个ipv4的字符串互联网协议转换成数字格式
int ip2long ( string $ip_address )
参数: ip_address 一个标准格式的地址。
返回值: 返回IP地址转换后的数字 或 FALSE 如果 ip_address 是无效的。
2、long2ip — 将数字格式转换成一个Ipv4的字符串互联网协议
string long2ip ( string $PRoPEr_address )
参数: proper_address 长整型的正确地址表示。
返回值: 返回互联网地址作为字符串。
3、使用方法
$ip = '10.1.1.1';
$ip_long = ip2long($ip);
echo $ip_long.PHP_EOL;
// 167837953echo long2ip($ip_long);
// 10.1.1.14、出现负数原因及处理方法
当ip地址比较大时,ip2long会出现负数:
$ip = '192.168.101.100';
$ip_long = ip2long($ip);
echo $ip_long.PHP_EOL;
// -1062705820echo long2ip($ip_long);
// 192.168.101.100原因说明:
IPv4使用无符号32位地址,因此最多有2的32次方减1(4294967295)个地址。书写用4个小数点分开的10进制数。
记为A.B.C.D,例如:192.168.100.100。
IPv4地址每个10进制数都是无符号的字节,范围在0~255,将IPv4地址转为无符号数,其实就是将每个10进制数放在对应的8位上,组成一个4字节的无符号整型。192.168.100.100,192,168在高8位100,100在低8位。
解决方法:
输出时用%u来格式化为无符号整型。
$ip = '192.168.101.100';
$ip_long = sprintf('%u',ip2long($ip));
echo $ip_long.PHP_EOL;
// 3232261476 echo long2ip($ip_long);
// 192.168.101.100相关教程推荐:《PHP教程》
以上就是php ip2long为什么会出现负数?怎么解决?的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: php ip2long为什么会出现负数?怎么解决?
本文地址: https://pptw.com/jishu/596653.html
