php检测ip是否允许访问

改代码可以检测访问者的ip是否在允许访问的列表中,支持ip通配符

<?php

//当前访问的ip
$ip = isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_X_FORWARDED_FOR"]:(isset($_SERVER["HTTP_CLIENT_IP"])?$_SERVER["HTTP_CLIENT_IP"]:$_SERVER["REMOTE_ADDR"]);
 //允许访问的ip
$allow_ips = array(
    "*.1.1.1", // 通配ip
    "114.114.114.114",//精准ip

);
// 获取不到当前ip
if(!$ip){
    header("HTTP/1.1 403 Forbidden");
    die("Forbidden");
}

if(!checkip($allow_ips,$ip)) {
    header("HTTP/1.1 403 Forbidden");
    die("Forbidden");
}

echo '检测通过';

// 检测ip
function checkip($allow_ips,$ip)
{
    // 空允许ip
    if(0 == count($allow_ips)) {
        return false;
    }
    //当前ip为空
    if (0 == strlen($ip)) {
        return false;
    }
    $ipArr = explode(".",$ip);
    $ipPartLen = count($ipArr);
    if($ipPartLen!=4) {
        return false;
    }
    // 在允许ip中
    if(in_array($ip,$allow_ips)) {
        return true;
    }

    $checkPass = false;
    //检测ip通配
    foreach($allow_ips as $allow){
        $allowArr = explode(".",$allow);
        //长度不同
        if(count($allowArr)!=$ipPartLen) {
            continue;
        }
        $currentCheckPass = true;
        foreach($ipArr as $k => $part)
        {
            //通配
            if($allowArr[$k] == "*") {
                continue;
            }
            //不同
            if ($allowArr[$k] != $part) {
                $currentCheckPass = false;
                break;
            }
        }
        //检测通过
        if($currentCheckPass){
            $checkPass = true;
            break;
        }
    }
    // 返回
    return $checkPass;
}

?>

未经允许不得转载:飞飞侠淘客帮助中心 » php检测ip是否允许访问

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏