理解了。下面是一个例子,演示如何使用 PHP 获取访问者 IP,并与数据库中的 IP 地址段进行比较。在这个例子中,我将使用 IP 地址和子网掩码的方式存储 IP 段,同时对比 IP 地址是否在指定的范围内。
- 数据库表结构:
CREATE TABLE ip_access (
id INT AUTO_INCREMENT PRIMARY KEY,
network_address VARCHAR(15) NOT NULL,
subnet_mask INT NOT NULL,
allow_access BOOLEAN NOT NULL
);
- 插入一些示例数据:
INSERT INTO ip_access (network_address, subnet_mask, allow_access) VALUES
('192.168.1.0', 24, true),
('10.0.0.0', 24, false);
- PHP 代码:
<?php
function isIPAllowed($ip) {
// 连接数据库,请根据实际情况修改连接参数
$conn = new mysqli("localhost", "username", "password", "database");
if ($conn->connect_error) {
die("数据库连接失败: " . $conn->connect_error);
}
// 获取访问者IP的整数表示
$ipLong = ip2long($ip);
// 查询是否存在匹配的IP段
$query = "SELECT allow_access FROM ip_access WHERE INET_ATON(network_address) <= $ipLong AND ($ipLong & (0xFFFFFFFF << (32 - subnet_mask))) = INET_ATON(network_address) LIMIT 1";
$result = $conn->query($query);
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
return (bool) $row['allow_access'];
}
$conn->close();
// 默认情况下禁止访问
return false;
}
// 获取访问IP
$visitorIP = $_SERVER['REMOTE_ADDR'];
// 检测是否允许访问
if (isIPAllowed($visitorIP)) {
echo "欢迎访问网站!";
} else {
echo "对不起,您无权访问网站。";
}
?>
这个例子中,isIPAllowed
函数用于检查给定的 IP 是否在数据库中的允许访问的 IP 段内。请注意,这里使用了 IP 地址和子网掩码来确定 IP 段,而不是存储起始和结束 IP 地址。