技术文摘
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 桌面假死无响应的处理办法
- Win11 取消合并任务栏的方法
- Win11 因无可用音频设备致使播放失败
- Win11 开机密码的取消办法
- 解决 Win11 字体模糊问题的方法
- 如何调出 Win11 系统中的我的电脑/此电脑
- Win11 卸载更新失败的应对之策
- Win11 系统中 Xbox 网络的位置详解
- Win11 中 Microsoft Store 无法打开的解决办法
- Win11 显示此站点不安全的解决办法
- Win11 取消推荐项目的方法
- Win11 启用 3D 查看器的方法
- Win11 安卓子系统文件的存储位置及路径更改
- Win10 升级至 Win11 的方法
- Win11 共享打印机无法连接的解决办法