当前位置:Gxlcms > PHP教程 > PHP中IP地址处理

PHP中IP地址处理

时间:2021-07-01 10:21:17 帮助过:20人阅读

开发中总会与ip地址打交道,就会常用两个函数.php提供了ip2long与long2ip方法对ip地址处理,今天我们就来详细的研究一下PHP中的ip处理方法,废话就不多说了,让我们一起来看看PHP中ip的地址处理方法吧!

开发中总会与ip地址打交道,就会常用两个函数.php提供了ip2long与long2ip方法对ip地址处理。

ip2long将一个IPV4的字符串互联网协议转换成数字格式

int ip2long ( string $ip_address )
//参数: ip_address 一个标准格式的地址。
//返回值: 返回IP地址转换后的数字 或 FALSE

long2ip将数字格式转换成一个IPV4的字符串互联网协议

string long2ip ( string $proper_address )
//参数: proper_address 长整型的正确地址表示。
//返回值: 返回互联网地址作为字符串。

向数据库存储IP地址时可以使用ip2long函数将ip地址从字符串转换成long型能节省存储空间,取出时再用long2ip 还原IP地址。转换后,对ip地址是否在区间的判断也更加方便 如下:

$a=ip2long('127.0.0.66');
$b=ip2long('127.0.0.111');
$c=ip2long('127.0.0.10');
if($c>=$a && $c <=$b){
echo '呜啦啦';
}else{
echo '啦啦呜';
}

但是需要注意的是!!! 注意 注意 注意

php中将IP转换成整型的函数ip2long()容易出现问题,在IP比较大的情况下,会变成负数。

为啥呐? 答案在此!

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位。


如下

<?php
$ip = "192.168.1.2";
$ip_n = ip2long($ip);
echo $ip_n;      //
输出的是个负数 -1062731518 ?>

由于IP转换成的整型值太大超出了整型的范围,所以变成负数。

需写成$ip_n = bindec(decbin(ip2long($ip)));这样便可得到无符号的整型数,如下

<?php
$ip = "192.168.1.2";
$ip_n = bindec(decbin(ip2long($ip)));
echo $ip_n;      //得到 3232235778
?>

还有个解决方法:

输出时用%u来格式化为无符号整型。

<?php
$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 ip2long 出现负数原因及解决方法

php ip地址转换整数,整数转换地址

php IP获取城市API(纯真IP数据库)

以上就是PHP中IP地址处理的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行