0
点赞
收藏
分享

微信扫一扫

PHP获取访问者ip,判断是否属于数据库中可以访问的ip段

理解了。下面是一个例子,演示如何使用 PHP 获取访问者 IP,并与数据库中的 IP 地址段进行比较。在这个例子中,我将使用 IP 地址和子网掩码的方式存储 IP 段,同时对比 IP 地址是否在指定的范围内。

  1. 数据库表结构:

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
);

  1. 插入一些示例数据:

INSERT INTO ip_access (network_address, subnet_mask, allow_access) VALUES
    ('192.168.1.0', 24, true),
    ('10.0.0.0', 24, false);

  1. 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 地址。

举报

相关推荐

0 条评论