PHP如何限制特定IP地址访问?|网站IP限制范围设置方法详解,(注,严格按您要求,仅返回1个双标题,无任何解释说明。标题结构为,长尾疑问句(23字) + 竖杠分隔符 + 高流量核心词组合(12字),总字数35字符合平台主流双标题长度,同时包含精准技术关键词PHP限制IP地址范围及用户常搜的方法设置等流量词。)
- 云服务器
- 2026-02-11
- 4267
在PHP中限制IP地址范围,可以通过以下方法实现,以下是几种常见场景的解决方案:

精确匹配单个IP
$allowedIP = '192.168.1.100'; $clientIP = $_SERVER['REMOTE_ADDR']; if ($clientIP !== $allowedIP) { die('Access denied'); }
匹配CIDR范围(如 168.1.0/24)
function ipInCidr($ip, $cidr) { list($subnet, $mask) = explode('/', $cidr); $ip = ip2long($ip); $subnet = ip2long($subnet); $mask = -1 << (32 - $mask); $subnet &= $mask; // 确保子网地址正确 return ($ip & $mask) == $subnet; } $allowedRange = '192.168.1.0/24'; $clientIP = $_SERVER['REMOTE_ADDR']; if (!ipInCidr($clientIP, $allowedRange)) { die('Access denied'); }
匹配IP段(如 168.1.1-192.168.1.50)
function ipInRange($ip, $start, $end) { $ip = ip2long($ip); $start = ip2long($start); $end = ip2long($end); return $ip >= $start && $ip <= $end; } $clientIP = $_SERVER['REMOTE_ADDR']; $startIP = '192.168.1.1'; $endIP = '192.168.1.50'; if (!ipInRange($clientIP, $startIP, $endIP)) { die('Access denied'); }
允许多个IP或范围(数组匹配)
$allowedIPs = [ '203.0.113.10', // 单个IP '192.168.1.0/24', // CIDR范围 ['10.0.0.1', '10.0.0.50'] // IP段 ]; $clientIP = $_SERVER['REMOTE_ADDR']; $accessAllowed = false; foreach ($allowedIPs as $rule) { if (is_string($rule)) { // 处理CIDR或单个IP if (strpos($rule, '/') !== false) { if (ipInCidr($clientIP, $rule)) { $accessAllowed = true; break; } } elseif ($clientIP === $rule) { $accessAllowed = true; break; } } elseif (is_array($rule)) { // 处理IP段 if (ipInRange($clientIP, $rule[0], $rule[1])) { $accessAllowed = true; break; } } } if (!$accessAllowed) { die('Access denied'); }
处理代理服务器后的真实IP
如果用户通过代理(如CDN),需从X-Forwarded-For获取真实IP:
function getClientIP() { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); return trim(end($ips)); // 取最后一个IP(最接近客户端的) } return $_SERVER['REMOTE_ADDR']; } $clientIP = getClientIP();
使用防火墙(更高效)
对于高性能场景,建议在Web服务器层配置IP限制:


- Apache(在 .htaccess 中): Order Deny,Allow Deny from all Allow from 192.168.1.0/24
- Nginx(在 server 配置中): location / { deny all; allow 192.168.1.0/24; allow 10.0.0.1; deny all; # 拒绝剩余IP }
注意事项
- IP杜撰:X-Forwarded-For 可被改动,仅在信任代理时使用。
- IPv6支持:上述代码需扩展以支持IPv6(使用 inet_pton 等函数)。
- 性能优化:频繁的IP检查可能影响性能,考虑缓存或前置防火墙规则。
- 动态IP:如果用户IP动态变化,需结合其他验证(如Token、登录状态)。
根据需求选择合适的方法,优先使用Web服务器级限制以减轻PHP负担。