PHP 中限流 IP 次数与允许部分 IP 访问的代码实例

2024-12-28 19:16:20   小编

在 PHP 开发中,经常会遇到需要对 IP 访问进行限流以及允许部分特定 IP 访问的需求。以下是一个相关的代码实例,帮助您更好地理解和实现这些功能。

<?php
// 定义允许访问的 IP 数组
$allowedIps = array('127.0.0.1', '192.168.1.100');

// 获取访问者的 IP 地址
$userIp = $_SERVER['REMOTE_ADDR'];

// 定义访问次数限制
$maxRequestsPerDay = 100;

// 记录访问次数的文件路径
$logFilePath = 'access_log.txt';

// 检查 IP 是否在允许列表中
if (!in_array($userIp, $allowedIps)) {
    die('您的 IP 不被允许访问。');
}

// 读取访问日志文件,获取当前 IP 的访问次数
if (file_exists($logFilePath)) {
    $logContent = file_get_contents($logFilePath);
    $requests = explode("\n", $logContent);
    $currentRequests = 0;
    foreach ($requests as $request) {
        $parts = explode(':', $request);
        if ($parts[0] == $userIp) {
            $currentRequests = (int)$parts[1];
            break;
        }
    }
} else {
    $currentRequests = 0;
}

// 判断访问次数是否超过限制
if ($currentRequests >= $maxRequestsPerDay) {
    die('您今日的访问次数已达上限。');
}

// 增加访问次数并更新日志文件
$currentRequests++;
$newLogEntry = $userIp. ':'. $currentRequests. "\n";
file_put_contents($logFilePath, $newLogEntry, FILE_APPEND);

// 这里是正常的业务逻辑代码
echo '欢迎访问!';

?>

上述代码首先定义了允许访问的 IP 数组,然后获取访问者的 IP 地址。通过判断访问者的 IP 是否在允许的列表中,决定是否允许继续访问。设置了每日的最大访问次数,并通过一个日志文件记录每个 IP 的访问次数。在每次访问时,检查访问次数是否超过限制,若未超过则正常处理业务逻辑,同时更新访问次数的记录。

这种限流和 IP 控制的机制可以有效地保护服务器资源,防止恶意访问和过度请求,同时也能实现对特定 IP 的灵活控制,以满足不同的业务需求。在实际应用中,您可以根据具体的场景和需求对代码进行进一步的优化和扩展。例如,可以设置不同的时间周期进行限流,或者将访问次数等信息存储在数据库中,以实现更复杂和高效的管理。

通过上述的 PHP 代码实例,您可以为您的应用添加有效的 IP 访问控制和限流措施,提升系统的稳定性和安全性。

TAGS: PHP 限流 IP 次数 允许部分 IP 访问 PHP 代码实例 PHP 网络安全

欢迎使用万千站长工具!

Welcome to www.zzTool.com