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

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

时间:2023-12-19 18:32:20浏览次数:42  
标签:ip 数据库 access 访问 allow IP PHP 访问者

理解了。下面是一个例子,演示如何使用 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 地址。

标签:ip,数据库,access,访问,allow,IP,PHP,访问者
From: https://blog.51cto.com/u_14540126/8892101

相关文章

  • ax650使用ax-pipeline进行推理
    ax650使用ax-pipeline进行推理搭建交叉编译环境拉取ax-pipeline源码及子模块gitclone--recursivehttps://github.com/AXERA-TECH/ax-pipeline.git下载sdkcdax-pipeline./download_ax_bsp.shax650cdax650n_bsp_sdkwgethttps://github.com/ZHEQIUSHUI/assets/re......
  • Mip-NeRF
    Mip-NeRF:AMultiscaleRepresentationforAnti-AliasingNeuralRadianceFieldshigh-resolution的时候,相机距离物体较近,捕捉的细节更多,需要高频信息;离远的看,我们看到的是更blurry、smoothing的图片。联合PE的作用,就是:不同尺度的视图需要不同的傅里叶特征,高频对于近距离图hi......
  • jQuery与JavaScript与ajax三者的区别与联系
    简单总结:1、JS是一门前端语言。2、Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新。3、jQuery是一个框架,它对JS进行了封装,使其更方便使用。jQuery使得JS与Ajax的使用更方便 关系比喻:若把js比作木头,那么jquery就是......
  • vue2前端调接口下载(导出)后端返回.zip压缩文件流
    1、接口api//三级教育档案导出exportfunctionsearchPersonnelHousInfoExport(data){returnrequest({url:train+'/fileExport/controller/export/personalProfile',method:'post',data:data,responseType:'blob',......
  • 搭建lnmp环境-php
    系统环境:centos7php7.4 ===安装php===#安装EPEL源yuminstall-yepel-release#安装Remi源yuminstall-yhttps://rpms.remirepo.net/enterprise/remi-release-7.rpm#安装yum包管理器工具(类似php的composer)yuminstall-yyum-utils#通过Remi指定PHP版本(后面安......
  • 高德地图api报错 Get geolocation timeout.Get ipLocation failed.
    使用了https报错Getgeolocationtimeout.GetipLocationfailed. 报错是定位超时,由于JSAPI使用的是浏览器提供的定位服务,所以定位的准确度和成功率都会对浏览器有很大的依赖。由于Chrome在国内没有提供服务,因此使用Chrome定位服务的浏览器,比如:Chrome、火狐、安卓原生WebVie......
  • 如何建立自己的代理IP池,减少爬虫被封的几率
    前言建立自己的代理IP池可以帮助减少爬虫被封的几率。通过使用代理IP,我们可以隐藏爬虫的真实IP地址,提高爬取网站的稳定性和安全性。本文将介绍如何建立一个代理IP池,并提供相关代码示例。一、了解代理IP的工作原理在开始建立代理IP池之前,我们需要了解代理IP的工作原理。代理IP是一个......
  • php mvc框架怎么实现路由的?
    都知道路由是实现框架重要的一步。如果对怎么实现框架感兴趣那必须要了解,而且对自己对正则表达是更加深刻了解。m----------模型v-----------视图c-----------控制器mvc模式就不想多说,网上解释的一大堆,各种理解。这个标准还是比较宽松的,看自己怎么理解。本文重点是是......
  • 什么是 JavaScript 闭包?
    什么是JavaScript闭包?在JavaScript中,闭包是指一个函数能够访问在它外部定义的变量。这些变量通常被称为“自由变量”,因为它们不是该函数的局部变量,也不是该函数的参数。闭包可以在函数内部创建,也可以在函数外部创建。JavaScript中的每个函数都是一个闭包,因为它们都能够访问......
  • P1082 [NOIP2012 提高组] 同余方程
    求关于\(x\)的同余方程\(ax\equiv1(\bmodb)\)的最小正整数解。根据取模的性质,这个方程相当于\(ax+by=1\),其中\(y\)为负数,形式类似于扩展欧几里得的经典形式\(ax+by=\gcd(a,b)\)。方程\(ax+by=m\)有整数解的必要条件是\(\gcd(a,b)|m\),此处\(m=1\),所以有\(\gcd(a,......