PHP中IP地址处理
来源:互联网 发布:linkin 大数据平台 编辑:程序博客网 时间:2024/05/01 08:45
近期对php基础知识做了一个梳理,将常用的几点总结记录下,当做自己对php的一个系统性的复习吧。
开发中总会与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?>
详细参考链接:http://blog.csdn.net/vfloyd/article/details/7440719
- php中IP地址处理
- PHP中IP地址处理
- PHP中客户端IP地址的获取
- PHP中获取用户IP地址
- IPy处理ip地址
- php获取ip 地址
- PHP获取IP地址
- PHP 获取IP地址
- php获得ip地址
- php获取ip地址
- php获取ip地址
- PHP获取IP地址
- php获取ip地址
- php 获得ip地址
- php获得ip地址
- PHP获取IP地址
- [php]ip地址查询
- php获得ip地址
- mybatis基础知识(第三更)
- 指向数组的指针【注意】
- Scrapy爬取网易云音乐和评论(二、Scrapy框架每个模块的作用)
- mysql基本的查询语法,持续更新中ing...
- Jmeter 测试 RabbirMQ 性能
- PHP中IP地址处理
- mybatis 根据 数据库表 自动生成 实体
- scrollToBottom、scrollToTop、scrollToPercentVertical 等设置无效
- Xcode9.0 编译时报错:Call to unavailable function 'system': not available on iOS
- 使用mingw-get.exe命令行工具在Windows平台上安装C++等语言的编译工具
- 互斥锁 pthread_mutex_init()函数
- window环境下Android抓包工具charles的使用
- Android Baidu定位的简单使用
- 将时间格式转换为带am pm的这种