当前位置:  开发笔记 > 编程语言 > 正文

PHP的ip2long有bug,请慎用

先看看下边这段PHP代码。这段使用ip2long函数,对同一个IP进行转换。当然,也有人认为58.99.011.1和058.99.011.1算不上合法的IP,那就Return,此文对你没有帮助。为什么要使用带前导零的ip:为了在数据库中查询,这个可以在IP库中定位到ip所对应的位置信息">

先看看下边这段PHP代码。这段使用ip2long函数,对同一个IP进行转换。当然,也有人认为58.99.011.1和058.99.011.1算不上合法的

IP,那就Return,此文对你没有帮助。

为什么要使用带前导零的ip:为了在数据库中查询,这个可以在IP库中定位到ip所对应的位置信息。虽然没有整型的IP查询效率高,但毕竟直观啊。

view plaincopy to clipboardprint?
echo ip2long('58.99.11.1'),"
";   //输出是 979569409 
echo ip2long('58.99.011.1'),"
";  //输出是 979568897 
echo ip2long('058.99.11.1'),"
";  //输出是空 
?> 
echo ip2long('58.99.11.1'),"
";   //输出是 979569409
echo ip2long('58.99.011.1'),"
";  //输出是 979568897
echo ip2long('058.99.11.1'),"
";  //输出是空
?>

 

在PHP 4.x,5.x中, 有前导零的ip转换的结果都不正确。

解决办法,使用写自己的函数:

view plaincopy to clipboardprint?
function myip2long($ip){ 
   $ip_arr = split('\.',$ip); 
   $iplOng= (16777216 * intval($ip_arr[0])) + (65536 * intval($ip_arr[1])) + (256 * intval($ip_arr[2])) + intval($ip_arr[3]); 
   return $iplong; 
}

 


推荐阅读
author-avatar
qCANL
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有