登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

pcwanli的博客

nx

 
 
 

日志

 
 

PHP:IP转换整形(ip2long)  

2010-11-12 11:12:37|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

如何将四个字段以点分开的IP网络址协议地址转换成整数呢?PHP里有这么一个函数ip2long.比如 
<?php 
echo ip2long("10.2.1.3"); 
?> 
我们将得到 
167903491 

这是如何计算的,目前我知道有两个算法。其一 
<?php 
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; 

?> 

其二,用位运算 
<?php 
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是否是有效的,如 
<?php 
function chk_ip($ip){ 
   if(ip2long($ip)=="-1") { 
      return false; 
   } 
   return true; 

//应用 
var_export(chk_ip("10.111.149.42")); 
var_export(chk_ip("10.111.256.42")); 
?> 
将输出true和false

  评论这张
 
阅读(636)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018