IP转换整形

 联系我们     |      2020-03-04 22:15

何以将三个字段以点分别的IP互连网址合同地址调换到整数呢?PHP里有那样二个函数ip2long.举例
复制代码 代码如下:
echo ip2long("10.2.1.3");
?>

咱俩将赢得 167903491

这是如何总计的,近年来自身清楚有四个算法。其一
复制代码 代码如下:
function ip2int($ip){
   //大家先把ip分为四段,$ip1,$ip2,$ip3,$ip4
   list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);
   //然后先是段乘以256的一回方,第二段乘以256的平方,第三段乘以256
   //那就是大家得到的值
    return$ip1*pow(256,3)+$ip2*pow(256,2)+$ip3*256+$ip4;
}
?>

其二,用位运算
复制代码 代码如下:
function ip2int($ip){
   list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);
    return($ip1<<24)|($ip2<<16)|($ip3<<8)|($ip4);
}
?>

俺们会意识,有些ip转形成整数后,是负的,那是因为得到的结果是有号子整型,最大值是2147483647.要把它转变为无符号的,能够用
sprintf("%u",ip2long($ip);

就会调换为正整数。何况获得的结果用long2ip也得以健康调换回原本的ip地址。也足以用ip2long来证圣元个ip是还是不是是有效的,如
复制代码 代码如下:
function chk_ip($ip){
   if(ip2long($ip)=="-1") {
      return false;
    }
lom599乐百家手机 ,    returntrue;
}
//应用
var_export(chk_ip("10.111.149.42"));
var_export(chk_ip("10.111.256.42"));
?>

百家了乐八大技巧 ,将输出true和false

把ip数据保存在数据库(MySQL卡塔尔(قطر‎中时候,我们习贯用ip2long函数生成整型,然后贮存在三个int(11卡塔尔国类型的字段中,不过,在分裂的种类平台上,ip2long函数得到的值是分裂的,因而只怕导致在从数据库中读出多少,用long2ip得到ip的时候发出错误,说一下我们相见的状态:
作者们用一个int(11State of Qatar类型(范围-2147483648 -2147483647State of Qatar来保存把贰个ip地址用ip2long管理获得的结果,举例ip是'202.105.77.179′,那么在三十四个人机器上获得的结果是:-899068493,而在61人机器上却收获3395898803.然后把它写入数据库,由于超过int(11卡塔尔国的约束,因而陆十一人机器上的结果被保留为int(11State of Qatar的最大值:2147483647.于是在从数据库中抽出的时候,便获得了错误的结果,会博得”127.255.255.255″这些ip地址.
解决的秘诀比较多,譬如能够用mysql的函数:INET_ATON和INET_NTOA来管理ip地址;或然把保存ip地址的字段改为bigint类型,那样在60位机器上即便保存的是3395898803,使用long2ip函数仍是可以收获不错的结果.