技术文摘
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 访问控制和限流措施,提升系统的稳定性和安全性。
- Win11 打开软件出现乱码的解决办法
- TPM 打开仍不兼容 Win11 的解决之道
- Windows11 预览版的升级途径及方法分享
- Win11 预览体验成员设置选项的选择及介绍
- Win11 输入法切换快捷键的设置方式
- Win11 KB5004300 更新失败 错误代码 0x800f0989 致使安装出错
- Win11 商店页面加载失败及应用商店无法打开的解决办法
- 电脑不支持 DX12 能否安装 Win11
- 微软 Win11 Build 22000.100 的更新内容:Win11 新版本有何变化
- Win11 更新 22000.100 后面部识别无法使用的解决办法
- Win11 22000.100 更新后 Windows Hello 无法使用如何解决?
- Win11 Ghost 安装教程全解析
- Win11 系统 22000.100 更新后开始菜单搜索无法输入文字的解决办法
- Win11 的游戏性能表现如何
- Windows11 22000.100 更新后闪屏的解决方法