PHP:IP轉換整形(ip2long)

如何將四個字段以點分開的IP網絡址協議地址轉換成整數呢?php裏有這麼一個函數ip2long.比如

<?php
echoip2long("10.2.1.3");
?>

  我們將得到

  167903491

  這是如何計算的,目前我知道有兩個算法。其一

<?php
functionip2int($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;
}
?>

  其二,用位運算

<?php
functionip2int($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是否是有效的,如

<?php
functionchk_ip($ip){
 if(ip2long($ip)=="-1"){
   returnfalse;
 }
 returntrue;
}
//應用
var_export(chk_ip("10.111.149.42"));
var_export(chk_ip("10.111.256.42"));
?>

  將輸出true和false

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章