php判断IP或者IP段是否在允许的范围内
时间:2020-07-31 16:12:15浏览:2558
本人原创,非喜勿喷
IP单独存放在txt文件内,一行一个规则,支持三种:
1、单独IP
2、带*的IP段
3、带-的IP段
限IPV4
txt例子如下:
106.85.10.20
219.153.*.*
219.101.216.176-180
PHP代码如下:
<?php
$UserIP = getIP();
$NoLimit = "0";
$Content = file_get_contents("1.txt");
$arr = explode("\n",$Content);
//上面这行注意,服务器是Linux系统无需修改,如为Win系统\n需要改为\r
foreach($arr as $IPFileLine)
{
$IPType = "1";
if(stripos($IPFileLine,"*")){
$IPType = "2";
}
if(stripos($IPFileLine,"-")){
$IPType = "3";
}
if($IPType==1 && $UserIP==$IPFileLine){
$NoLimit = "1";
break;
}
if($IPType==2){
$IPFileLine = str_replace(".*","",$IPFileLine);
$ArrSingleIP = explode(".", $IPFileLine);
$ArrUserIP = explode(".", $UserIP);
$CheckIP= "";
for($i=0;$i<count($ArrSingleIP);$i++){
$CheckIP .= $ArrUserIP[$i].".";
}
if($CheckIP==$IPFileLine."."){
$NoLimit = "1";
break;
}
}
if($IPType==3){
$CheckIP= $SingleIP = "";
$ArrSingleIP = explode(".", $IPFileLine);
$ArrUserIP = explode(".", $UserIP);
for($i=0;$i<3;$i++){
$CheckIP .= $ArrUserIP[$i].".";
$SingleIP .= $ArrSingleIP[$i].".";
}
if($CheckIP==$SingleIP){
$ArrIPSection = explode("-", $ArrSingleIP[3]);
if($ArrUserIP[3] >= $ArrIPSection[0] && $ArrUserIP[3] <= $ArrIPSection[1]){
$NoLimit = "1";
break;
}
}
}
}
echo $NoLimit;
function getIP() {
if (@$_SERVER["HTTP_X_FORWARDED_FOR"])
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else if (@$_SERVER["HTTP_CLIENT_IP"])
$ip = $_SERVER["HTTP_CLIENT_IP"];
else if (@$_SERVER["REMOTE_ADDR"])
$ip = $_SERVER["REMOTE_ADDR"];
else if (@getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (@getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if (@getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else
$ip = "Unknown";
return $ip;
}
返回变量是:$NoLimit 1为命中,0为否
上一篇:php等比缩放图片
下一篇:有搜索功能的下拉框插件chosen.jquery.js
- Linux文章
- PHP文章
- 随机文章
- 让nginx支持ssi
- Linux中的find(-atime...
- mysql的expire_logs_...
- PHP 扩展 libsodium s...
- Linux下利用find和cp实现筛...
- 使用mysqldump命令导出备份m...
- Linux系统如何设置开机自动运行脚...
- Linux上实现秒级执行的定时任务
- shell echo -e 颜色输出
- Linux下通过grep查找指定的进...
发表评论
昵称: 验证码: