php怎么实现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地址转换整型即可。
    阅读数:176 ip php
  • php怎么实现ip收集

    php实现获取ip的方法:1、使用“$_SERVER["REMOTE_ADDR"]”获取;2、使用“($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"]”获取;3、使用getRealIp方法获取等。
    阅读数:766 php ip
  • php 怎么查询用户的ip

    php查询用户ip的方法:1、通过“$_SERVER["REMOTE_ADDR"]”方式获取用户ip;2、通过“($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];”获取用户ip等等。
    阅读数:535 php ip
  • php怎么将ip转为城市

    php将ip转为城市的方法:1、创建一个PHP示例文件;2、获取具体的IP地址;3、通过“function get_tag_data($html,$tag){...}”等方法将ip转为城市地址即可。
    阅读数:895 php ip 城市
  • php怎么模拟不同ip访问

    php模拟不同ip访问的方法:1、设置页面限制ip和来源访问;2、使用curl正常访问;3、使用curl模拟ip和来源进行访问,代码如“curl_setopt($ch, CURLOPT_HTTPHEADER, array('CLIENT-IP: ip','X-FORWARDED-FOR: ip'));”。
    阅读数:533 php
  • php怎么禁止国内ip访问网站

    php禁止国内ip访问网站的方法:1、通过“$_SERVER['REMOTE_ADDR']”获取ip地址;2、通过“if((!empty($banned['data']['country_id']){...}”判断并禁止国内ip访问网站。
    阅读数:741 php ip
  • 基于Java解决华为机试实现整数与IP地址间的转换

    这篇文章主要介绍了基于Java解决华为机试实现整数与IP地址间的转换,文章举例说明围绕文章主题展开相关内容,具有一定的参考价值,需要的小伙伴可以参考一下
  • Oracle RAC怎么修改Scan IP,Public IP

    这篇文章主要讲解了“Oracle RAC怎么修改Scan IP,Public IP”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle RAC怎么修改Scan IP,Public IP
    阅读数:710 oracle
  • IP门禁:保姆式教你用PHP实现一个IP防火墙

    最近我遇到一个需求,我的一台服务器总是遭到端口扫描和恶意登录攻击,对此可以怎么办呢?似乎除了内网隔离、增强密码认证、证书登录、设置防火墙iptables,网上找不到什么别的方案,对了,还用堡垒机的方案。这些方案实际上都无法解决我的问题。这是一台公网服务器,并没有什么复杂的网络结构,所以不能建立内网隔离。调整账号的密码策略,自然是一个方案,但是人工操作太麻烦,而且我一般经常换电脑使用,如果修改密码,公
    阅读数:774 php
  • 弹性ip怎么远程

    弹性ip远程的方法:1、在win桌面可使用【win+r】打开运行窗口;2、输入“mstsc”指令打开远程桌面连接程序;3、“远程桌面连接”的对话框中,点击“显示选项”;4、输入云服务器的弹性公网ip和用户名,点击“连接”;5、最后输入云服务
    阅读数:230 弹性ip
  • 域名ip怎么查

    查看域名ip的方法:1.在电脑打开命令指示符。2.输入ping+空格+需要查询的域名进行查询。ping 192.168.0.13.然后按回车键,就可以查询到对应的ip地址信息。
    阅读数:410 域名
  • 怎么用ip进phpmyadmin

    这篇文章主要介绍了怎么用ip进phpmyadmin,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。如果想要限定只有特定的ip地址段能够访问phpmyadmin,则修改配置文件con
    阅读数:251 phpmyadmin mi
  • 弹性公网ip怎么绑定

    弹性公网ip绑定的方法:1、登录云服务器控制台;2、点击左侧列表中“弹性公网 IP”菜单;3、在云服务器的EIP列表项后,点击“绑定”;4、选择需要绑定的云产品类型以及实例ID;5、最后点击“绑定”即可。弹性公网IP绑定云产品操作步骤:1、
    阅读数:379 弹性公网ip
  • Ubuntu怎么限制端口ip

    Ubuntu限制端口ip的示例:例如只允许访问的ip为“192.168.1.1”和指定的IP访问服务器的指定端口:“22”。1.打开终端命令行。2.输入以下命令设置允许访问的ip。sudo iptables -I INPUT -p tcp
    阅读数:570 ip ubuntu
  • 域名怎么绑定动态ip

    可以使用第三方软件来绑定动态ip,如:1.进入第三方软件官方网站。2.找到内网穿透>增加映射数,点击进入。3.在应用域名中输入你申请的域名,内网主机输入你网站所在的电脑ip地址,内网端口选择你网站运行的端口。4.测试一下,域名和动态外网ip
    阅读数:536 动态ip 域名
  • 弹性公网ip怎么用

    1.绑定到云服务器上,实现云服务器连接公网的目的。2.NAT网关通过与弹性公网IP绑定,可以使多个云主机共享弹性公网IP访问Internet或使云主机提供互联网服务。3.绑定ELB实例,通过弹性公网IP对外提供服务,将来自公网的客户端请求按
    阅读数:448 弹性公网ip
  • 多ip香港vps怎么选择

    多ip香港vps选择的方法:1、普通网站选择2核左右的CPU,流量大的网站选择4核及左右的CPU;2、看网站风格、构造和浏览量等指标值,按实际情况选择网络宽带;3、按网站用户的所在地域选择网络线路,保证网站的访问速度;4、考虑香港vps剩下
    阅读数:436 vps 多ip香港vps 香港vps
  • 服务器ip怎么查看

    服务器ip查看的方法:1、通过iproute2 工具来获取地址,运行结果是会有一行或两行返回值,都是正确的地址;2、使用icanhazip方法查看服务器的IP地址;3、在百度网址中,输入IP按回车,就会显示服务器的IP地址。具体内容如下:1
    阅读数:410 ip 服务器
  • 弹性公网ip怎么绑定实例

    弹性公网ip绑定实例的方法:1、打开云服务器实例控制台;2、点击左侧“实例与镜像”菜单并选择“实例”;3、在实例列表中选择目标实例;4、点目标实例的“更多”并选择“网络和安全组”下的“绑定弹性IP”选项;5、最后选择弹性IP进行绑定并点击“
    阅读数:260 弹性公网ip
  • 宝塔用了cdn怎么获取IP

    宝塔用了cdn获取IP的方法:1.打开宝塔控制面板。2.点击“软件管理”,选择“nginx管理”。3.在对话框中,点击左侧“配置修改”。4.在配置文件中加入下面代码即可。set_real_ip_from 0.0.0.0/0;real_ip_
    阅读数:690 CDN ip 宝塔