返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php怎么实现ip转整数
  • 188
分享到

php怎么实现ip转整数

ipphp 2015-06-12 08:06:36 188人浏览
摘要

php实现ip转整数的方法:1、创建一个PHP示例文件;2、通过“ip2long($ip);”方法将ip地址转换整型即可。

本文操作环境:windows7系统、PHP7.1版、DELL G3电脑

php怎么实现ip转整数 ?

PHP中IP地址与整型数字互相转换详解

这篇文章主要介绍了php中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与long2ip的使用,以及它们的BUG介绍,最后给出自己写的两个算法,需要的朋友可以参考下

IP转换成整型存储是数据库优化一大趋势,不少人目前存储IP时还在使用字符串类型存储,字符串索引比整型索引消耗资源很多,特别是表中数据量大的时候,以及求查询某一个ip段的数据,今天说的ip是指ip4,ip6不在本文范围内。

系统函数ip2long与long2ip
PHP中有内置函数ip2long可以将ip地址转换整型。

代码如下:

$ip = '210.110.11.49';echo ip2long($ip);

输出:

-764540111

输出的整型有负号是因为我们得到的结果是有符号整型,有符号整型最大值2147483647,要把结果转换为无符号型可以这么写

3530427185

使用long2ip把整型转换回ip地址

$ip = '210.110.11.49';$ip_int = ip2long($ip);echo $ip."<br />";echo $ip_int."<br />";echo long2ip($ip_int);

输出:

210.110.011.49
-764540623
210.110.9.49

转换结果不匹配,我们试着在ip第一段数字前加前导0,再看看

$ip = '021.110.11.49';$ip_int = ip2long($ip);echo $ip."<br />";echo $ip_int."<br />";echo long2ip($ip_int);

输出:

021.110.11.49
292424497
17.110.11.49

转换结果都出错。以上例子都是因为加了前导0后导致转换结果出错,连带逆转结果与原转换ip不匹配。

转换原理

目前有两个算法:
第一、第一段乘以256的三次方,第二段乘以256的平方,第三段乘以256、最后总和

$ip = '0210.110.11.49'; 
function ipToInt($ip){    $iparr = explode('.',$ip);    $num = 0;    for($i=0;$i<count($iparr);$i++){        $num += intval($iparr[$i]) * pow(256,count($iparr)-($i+1));
    }    return $num;
} 
echo  $ip.'<br />';$ip_int = ipToInt($ip);echo $ip_int.'<br />';echo long2ip($ip_int);

输出:

0210.110.11.49
3530427185
210.110.11.49

第二、通过位运算符

$ip = '0210.110.11.49'; 
function ipToInt($ip){    $iparr = explode('.',$ip);    return (intval($iparr[0]<<24))|(intval($iparr[1])<<16)|(intval($iparr[2])<<8)| (intval($iparr[3]));
} 
echo  $ip.'<br />';$ip_int = ipToInt($ip);echo $ip_int.'<br />';echo long2ip($ip_int);

输出:

0210.110.11.49
-764540111
210.110.11.49

检测IP是否合法

第一、自己遍历检测

function check_ip($ip){    $iparr = explode('.',$ip);    foreach($iparr as $v){ if($v>255) return false; }    return true;
} 
echo '210.285.11.49,';var_dump(check_ip('210.285.11.49'));echo '<br />';echo '210.205.11.49,';var_dump(check_ip('210.205.11.49'));
[code]

输出:
[code]210.285.11.49,bool(false)210.205.11.49,bool(true)

第二、使用ip2long返回

function check_ip($ip){    if(ip2long($ip)) return true;    return false;
} 
echo '210.285.11.49,';var_dump(check_ip('210.285.11.49'));echo '<br />';echo '210.205.11.49,';var_dump(check_ip('210.205.11.49'));

输出:

210.285.11.49,bool(false)210.205.11.49,bool(true)

后记

不少人把ip写库用ip2long转换存放int类型的字段中,但是,在不同的系统平台上,ip2long函数得到的值是不同的,因此可能造成在从数据库中读出数据逆转ip时用long2ip得到的ip与原ip不符合
如果是Mysql可以使用mysql系统函数INET_ATON与INET_NTOA解决,或者使用bigint类型处理,要么自己写函数。

--结束END--

本文标题: php怎么实现ip转整数

本文链接: https://www.lsjlt.com/news/455.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • php怎么实现ip转整数
    php实现ip转整数的方法:1、创建一个PHP示例文件;2、通过“ip2long($ip);”方法将ip地址转换整型即可。 ...
    188
    2023-04-02
    ip php
  • php整数反转怎么实现
    php实现整数反转的方法:1、创建一个PHP示例文件;2、通过“function reverse($x) {...}”方法实现整数反转即可。 ...
    307
    2023-04-02
    php
  • php怎么将2.131转换成整数
    php将2.131转换成整数的方法:1、使用floor函数进行舍去法取整;2、使用ceil函数实现进一法取整;3、通过round函数进行四舍五入法取整。 ...
    382
    2023-04-02
    php 整数
  • php怎么实现数值转ascii
    php实现数值转ascii的方法:1、创建一个PHP示例文件;2、通过“function NumToASCII($num) {...}”方法将数字转字母即可。 ...
    165
    2023-04-02
    php ascii
  • php怎么实现字符转binary
    php实现字符转binary的方法:1、创建一个PHP示例文件;2、通过“function StrToBin($str){...}”方法将字符串转为二进制数据即可。 ...
    954
    2023-04-02
    php binary 二进制
  • php 怎么实现日期转中文
    php实现日期转中文的方法:1、创建一个PHP示例文件;2、通过“private function toDateChinese($date){...}”方法实现日期转中文汉字即可。 ...
    324
    2023-04-02
    php
  • php怎么实现字符转电码
    php实现字符转电码的方法:1、注册开通标准电码查询API接口;2、根据“http://v.juhe.cn/telecode/to_telecodes.php?chars=%e8%81%9a%e5%90%88%e6%95%b0%e6%8d%ae&key= xxx key”方式请求数据;3、根据传入的字符返回标准电码即可。 ...
    669
    2023-04-02
    电码 字符 php
  • php怎么实现ip收集
    php实现获取ip的方法:1、使用“$_SERVER["REMOTE_ADDR"]”获取;2、使用“($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"]”获取;3、使用getRealIp方法获取等。 ...
    770
    2023-04-02
    php ip
  • curl 怎么转php
    curl转php的方法:1、通过“curl -X GET -H "Content-Type:application"...”获取状态;2、设置状态;3、通过“$header= array(...)”方法实现curl转为php发送即可。 ...
    853
    2023-04-02
    curl php
  • php怎么转txt文件
    php转txt文件的方法:1、找到需要转换格式的PHP文件;2、鼠标右键在弹出的菜单中选择【重命名】;3、直接修改后缀名为txt保存即可。 ...
    283
    2023-04-02
    php txt
  • php svg怎么转jpg
    php svg转jpg的方法:1、创建一个PHP示例文件;2、通过“public function svgtojpg(){$image =...}”方法实现转换即可。 ...
    447
    2023-04-02
    php svg jpg
  • php怎么实现数字转字符串
    php实现数字转字符串的方法:1、创建一个PHP示例文件;2、定义一个数字;3、通过“string strval ( mixed $var )”方法将数字转成字符类型即可。 ...
    1093
    2023-04-02
    php 数字 字符串
  • php 怎么实现rgb转十六进制
    php实现rgb转十六进制的方法:1、创建一个PHP示例文件;2、通过“function RGBToHex($rgb){...}”方法实现RGB转十六进制即可。 ...
    602
    2023-04-02
    php rgb 十六进制
  • php怎么实现10进制转8进制
    php实现10进制转8进制的方法:1、创建一个PHP示例文件;2、通过“decoct()”方法把十进制数值转换为八进制即可。 ...
    265
    2023-04-02
    php 10进制 8进制
  • php怎么将值转为整数
    方法:1、在值之前加上“(int)”或“(integer)”,例“3.14(int)”;2、用intval()函数,语法“intval(值)”;3、用ceil()函数,语法“ceil(值)”;4、用floor函数,语法“floor(值)”。 ...
    954
    2023-04-02
    php 整数
  • php怎么将整数转为16进制
    php将整数转为16进制的方法:1、使用dechex()函数,语法“dechex(整数值)”;2、使用base_convert()函数,语法“bindec(整数值, 10, 16)”。 ...
    591
    2023-04-02
    php 进制转换 十进制转十六进制
  • php怎么把负数转为正整数
    php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。 ...
    705
    2023-04-02
    php
  • php 富文本怎么转 html
    php富文本转html的方法:1、打开相应的代码文件并修改图片路径;2、利用phpword转为html,代码如“$phpWord=new\ PhpOffice \ PhpWord \ PhpWord...” ...
    929
    2023-04-02
    php 富文本 html
  • php 怎么将数组转大写
    php将数组转大写的方法:1、创建一个PHP示例文件;2、定义一个关联数组;3、使用foreach语句遍历数组;4、使用strtoupper函数将数组元素转为大写即可。 ...
    210
    2023-04-02
    php 数组 大写
  • php字符型怎么转整型
    php字符型转整型的方法:1、创建一个PHP示例文件;2、通过“foreach($arr as $key=>$val){print($key == "aa" ? 5 : $val);}”方式或“((int)('132very'));”方式将字符型转换整型即可。 ...
    837
    2023-04-02
    php
热门问答
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作