PHP实现限制ip
限制IP访问的实现方法
在PHP中限制IP访问可以通过多种方式实现,以下是几种常见的方法:
获取客户端IP地址
function getClientIP() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
return $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
return $_SERVER['REMOTE_ADDR'];
}
}
$clientIP = getClientIP();
白名单方式限制IP

$allowedIPs = ['192.168.1.1', '10.0.0.1']; // 允许访问的IP列表
$clientIP = getClientIP();
if (!in_array($clientIP, $allowedIPs)) {
header('HTTP/1.0 403 Forbidden');
exit('Access Denied');
}
黑名单方式限制IP
$blockedIPs = ['123.45.67.89', '98.76.54.32']; // 禁止访问的IP列表
$clientIP = getClientIP();
if (in_array($clientIP, $blockedIPs)) {
header('HTTP/1.0 403 Forbidden');
exit('Access Denied');
}
IP范围限制

$clientIP = ip2long(getClientIP());
$startIP = ip2long('192.168.1.0');
$endIP = ip2long('192.168.1.255');
if ($clientIP < $startIP || $clientIP > $endIP) {
header('HTTP/1.0 403 Forbidden');
exit('Access Denied');
}
使用.htaccess文件限制IP
Order Deny,Allow
Deny from all
Allow from 192.168.1.1
Allow from 10.0.0.0/24
数据库存储IP限制规则
// 假设有一个数据库表存储了IP限制规则
$db = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $db->prepare("SELECT * FROM ip_restrictions WHERE ip_address = ?");
$stmt->execute([$clientIP]);
$restriction = $stmt->fetch();
if ($restriction && $restriction['is_blocked']) {
header('HTTP/1.0 403 Forbidden');
exit('Access Denied');
}
注意事项
- 代理服务器可能会影响IP检测的准确性
- IPv6地址需要特殊处理
- 动态IP用户可能会被错误限制
- 性能考虑:大量IP规则检查可能影响网站速度
以上方法可以单独使用,也可以组合使用以实现更灵活的IP访问控制策略。






