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
- TMThosting→达拉斯高防服务器每月 47.5 美元起 西雅图高防全球[VPS测评]
- 疯狂猜成语 图猜成语一个人在看书后面有一口锅在火上煮东西是什么成语?全球[VPS测评]
- 练手专用 $7 年 2G 内存 30G SSD 2T 流量 100Mbp全球[VPS测评]
- 优惠 趣味云→首月 6 折 香港 CN2 线路 1G 内存套餐首月仅需 香港VPS[主机]
- Usonyx - 新加坡 VPS 最低月付 4.67 新加坡元 可看奈飞全球[VPS测评]
- 520 欢庆优惠 VpsMS 洛杉矶安畅 GIA-CN2 线路 VPS 全球[VPS测评]
- Internet Brothers→$18 月 1G 内存 30GB S虚拟空间(主机)
- 极客主机→VPS 全场 8 折 充 300 送 50 日本&新加坡&美国日本VPS[主机]
- 便宜 Supremevps→$18 年 2 核 2G 35G SSD 3全球[VPS测评]
- 补货通知 搬瓦工洛杉矶机房双向 CN2 GIA 线路 46.87 美元每全球[VPS测评]
- 正确看待域名是否需要添加 www 前缀,对SEO有何影响?全球[VPS测评]
- 如何优化和加速你的WordPress博客访问速度全球[VPS测评]
- HydroVPS 加拿大绿色环保VPS 1G内存/15GNvme/500全球[VPS测评]
- 用XAMPP搭建本地PHP测试环境及安装WordPress全球[VPS测评]
- 怎么去选购台式机内存/显卡/硬盘全球[VPS测评]
- DMIT 香港/洛杉矶/日本Lite国际线路年付七折,半年付八折日本VPS[主机]
- GigsGigsCloud 个人款季付18美金 美西CN2 GIA 三网全球[VPS测评]
- 香港云服务器怎么选?云服务器性能测评对比香港VPS[主机]
- 2022年黄河流域跨境电商博览会将于8月26日至28日在青岛西海岸新区举全球[VPS测评]
- 亚马逊卖家与广告流量之间的博弈才刚刚开始?品牌卖家如何冲破广告之困...全球[VPS测评]
- 云米科技:美国CERA三网回程GIA 10Mbps大带宽,年付最低400美国VPS[主机]
- Hostkvm:香港/韩国CN2云服务器 大带宽VPS 2核4G,$7.韩国VPS[主机]
- 六一云:香港CN2/洛杉矶高防85折优惠,CDN半年优惠,充值返利送水杯香港VPS[主机]
- 蓝米云:美国cera vps/香港cn2vps套餐,1核2G/40G/1美国VPS[主机]
- 初忆云:香港美国cn2云服务器30元;香港cn2高防vps30元,美国1美国VPS[主机]
- CIO和其他IT领导者充分利用边缘计算增强业务的4个关键全球[VPS测评]
- 好云:国内云服务器2核2G5M优惠,仅350元/年;香港/海外云服务器,香港VPS[主机]
- 硅云服务器拼团活动:香港云服务器1核1G,拼团价仅98元/年香港VPS[主机]
- GreenCloudVPS:5折、6折优惠,日本、新加坡、香港等KVM 日本VPS[主机]
- CombCloud,香港沙田cn2vps终身七折起,高质量网络稳定低延迟香港VPS[主机]
转载请注明原文地址:http://140.238.13.167:12355/read-220202.html











