PHP 判断 IP 是否在指定 IP 段内的类
|
![]() |
![]() |
![]() |
| 【性价之王】 | 【线路之王】 | 【价格之王】 | 【配置之王】 |
| 【免费之王】 | 【香港首推】 | 【梯子之王】 | 【独服之王】 |
说明:
检测一个 IP 地址是否在规定网段内的类。IP 在指定 IP 段范围内的话返回 TRUE 和信息“IP 检测通过”,IP 不在 IP 段范围内则返回 FALSE 和错误信息,错误信息可以从属性“msg”中获得,详见用法和代码。
代码:
<?php class ipCheck { public $ipRangeStr = '10.0.0.1/8'; public $msg = ''; function __construct($ipRangeStr){ !empty($ipRangeStr) ? $this->ipRangeStr = $ipRangeStr : ''; } function check($ip = '') { empty($ip) && $ip = $this->getClientIp(); # 判断检测类型 if (FALSE !== strpos($this->ipRangeStr,'-')){ $type = 'size'; // 简单比大小:10.0.0.1-254 OR 10.0.0.1-10.0.0.254 }else if(FALSE !== strpos($this->ipRangeStr,'/')){ $type = 'mask'; // 掩码比大小:10.0.0.1/24 }else{ $this->msg = '错误的 IP 范围值'; return FALSE; } # 分析 IP 范围 if ('size' === $type){ $ipRangeStr = explode('-',$this->ipRangeStr); $ipAllowStart = $ipRangeStr[0]; $ipAllowEnd = $ipRangeStr[1]; if (FALSE === strpos($ipAllowEnd,'.')){ # 10.0.0.254 OR 254 $ipAllowElmArray = explode('.',$ipAllowStart); $ipAllowEnd = $ipAllowElmArray[0] . '.' . $ipAllowElmArray[1] . '.' . $ipAllowElmArray[2] . '.' . $ipAllowEnd; } }else if ('mask' === $type){ $ipRangeStr = explode('/',$this->ipRangeStr); $ipRangeIP = $ipRangeStr[0]; # 获取掩码中最后一位非零数的值 $ipRangeMask = (int)$ipRangeStr[1]; $maskElmNumber = floor($ipRangeMask/8); # 保留 IP 前几段 $maskElmLastLen = $ipRangeMask % 8; # 255.255.here.0 $maskElmLast = str_repeat(1,8-$maskElmLastLen); $maskElmLast = bindec($maskElmLast); # 掩码中 IP 末段最大值(十进制) // 获取 IP 段开始、结束值 $ipRangeIPElmArray = explode('.',$ipRangeIP); if (0 == $maskElmNumber){ $ipAllowStart = '0.0.0.0'; $ipAllowEnd = $maskElmLast . '.254.254.254'; }else if (1 == $maskElmNumber){ $ipAllowStart = $ipRangeIPElmArray[0] . '.' . '0.0.0'; $ipAllowEnd = $ipRangeIPElmArray[0] . '.' . $maskElmLast . '.254.254'; }else if (2 == $maskElmNumber){ $ipAllowStart = $ipRangeIPElmArray[0] . '.' . $ipRangeIPElmArray[1] . '.' . '0.0'; $ipAllowEnd = $ipRangeIPElmArray[0] . '.' . $ipRangeIPElmArray[1] . '.' . $maskElmLast . '.254'; }else if (3 == $maskElmNumber){ $ipAllowStart = $ipRangeIPElmArray[0] . '.' . $ipRangeIPElmArray[1] . '.' . $ipRangeIPElmArray[2] . '.' . '0'; $ipAllowEnd = $ipRangeIPElmArray[0] . '.' . $ipRangeIPElmArray[1] . '.' . $ipRangeIPElmArray[2] . '.' . $maskElmLast; }else if (4 == $maskElmNumber){ $ipAllowEnd = $ipAllowStart = $ipRangeIP; }else{ $this->msg = '错误的 IP 段数据'; return $this->msg; } }else{ $this->msg = '错误的 IP 段类型'; return $this->msg; } // 检测 IP $ipAllowStart = $this->getDecIp($ipAllowStart); $ipAllowEnd = $this->getDecIp($ipAllowEnd); $ip = $this->getDecIp($ip); if (!empty($ip)){ if ($ip <= $ipAllowEnd && $ip >= $ipAllowStart){ $this->msg = 'IP 检测通过'; return TRUE; }else{ $this->msg = '此为被限制 IP'; return FALSE; } }else{ FALSE === ($this->msg) && $this->msg == '没有提供待检测 IP'; // getClentIp() 是否返回 false return $this->msg; // 没有获取到客户端 IP,返回 } } // 10 进制 IP function getDecIp($ip){ $ip = explode(".", $ip); return $ip[0]*255*255*255+$ip[1]*255*255+$ip[2]*255+$ip[3]; } // 获取客户端 IP function getClientIp(){ if(isset($_SERVER['REMOTE_ADDR'])){ return $_SERVER['REMOTE_ADDR']; }else{ $this->msg = '不能获取客户端 IP'; return FALSE; } } } ?>用法:
$ipCheck = new ipCheck('192.168.1.1-192.168.1.254'); echo (TRUE === $ipCheck ->check('192.168.1.45')) ? '在范围内' : $ipCheck->msg;
$ipCheck = new ipCheck('192.168.1.1-254'); echo (TRUE === $ipCheck ->check('192.168.1.45')) ? '在范围内' : $ipCheck->msg;
$ipCheck = new ipCheck('192.168.1.1/24'); echo (TRUE === $ipCheck ->check('192.168.1.45')) ? '在范围内' : $ipCheck->msg; 猜你可能想看的VPS
- 恒创科技:海外全球大促,香港美国服务器,全场低至3折限量首购 美国VPS[主机]
- 好朋友51WORLD启动“地球克隆计划5”,我要去元宇宙参加了 全球[VPS测评]
- 拼多多拟建跨境电商平台:挖角SHEIN员工,0佣金招商入驻 全球[VPS测评]
- 实例 GIA0910629396 重启失败,原因:sudo: unabl 全球[VPS测评]
- JGKVM活动钜惠:美国cn2,香港cmi,大带宽vps,三网直连,10 美国VPS[主机]
- 磐逸云怎么样?1核1G香港安畅CN2 VPS带宽5M年付128元 香港VPS[主机]
- tudcloud,香港vps终身八折$7.76/月起,1核1G内存,香港 香港VPS[主机]
- 咖啡主机:美国高防vps、香港vps 可享受6-7折促销 每月仅需14元 美国VPS[主机]
- 二三互联,香港cn2云服务器5折+85折双重优惠,稳定不限流量,1核1G 香港VPS[主机]
- 云群网络怎么样?香港云服务器高端弹性云2核2G2M带宽,仅588元/年 香港VPS[主机]
- 紫云服务器怎么样?紫云香港云服务器1核1G2M仅65元/月 香港VPS[主机]
- 者也vps年终特惠:全场云服务器7折终身优惠,赠1G内存,充1000送3 全球[VPS测评]
- 阿里云香港vps怎么样?阿里云香港、新加坡云主机如何购买? 香港VPS[主机]
- 酷锐云元旦钜惠:大量香港/美国vps优惠码,香港1核2G云主机仅20元/ 美国VPS[主机]
- TabbyCloud:1核/1GB/20GB/2TB流量/50Mbps/ 香港VPS[主机]
- 恒星云:香港沙田CN2VPS低至9.9元/起_国内BGP云服务器4核4G 香港VPS[主机]
- GigsGigsCloud:2核/4GB/50G空间/1TB流量/10M 虚拟空间(主机)
- 云米科技:香港安畅/美国Cera/日本CN2机房,海外云服务器最低11元 日本VPS[主机]
- edgeNAT:香港/韩国/美国CN2云服务器,企业运营,年付6折/月付 韩国VPS[主机]
- edgenat:香港vps、韩国vps、洛杉矶vps买1送1,买多久送多 韩国VPS[主机]
- gcorelabs:KVM主机€1.08/月起;俄罗斯/美国/香港/日本 日本VPS[主机]
- 野草云:香港CN2VPS年付36折,137元/年;独立服务器350元月起 独立服务器[U]
- 硅云香港服务器怎么样?看网友们是怎么评价的 香港VPS[主机]
- 6种样式社交论坛网站HTML5模板 - Social 全球[VPS测评]
- 游戏服务器是什么意思?游戏服务器可以用云服务器吗? 全球[VPS测评]
- 快速云:云计算分类和云计算的特点 全球[VPS测评]
- 印象云怎么样?85折香港安畅CN2vps带宽3M月付23元 香港VPS[主机]
- 傲闪云vps,1核1G低至10元起,国内高防/香港CN2/美国CN2/美 美国VPS[主机]
- ExCloud:1核256M存/8GB SSD空间/100GB流量/OV 虚拟空间(主机)
- centos7如何查看firewall防火墙状态:开启/关闭/重启防火墙 全球[VPS测评]
转载请注明原文地址: http://140.238.13.167:12355/read-220202.html











