php实现ip白名单黑名单功能
这个是一个检测ip是否非法的php函数,适应于白名单,黑名单功能开发,主要场景应用于:api来源限制,访问限制等.
/**
*安全IP检测,支持IP段检测
*@paramstring$ip要检测的IP
*@paramstring|array$ips 白名单IP或者黑名单IP
*@returnbooleantrue在白名单或者黑名单中,否则不在
*/
functionis_safe_ip($ip="",$ips=""){
if(!$ip)$ip=get_client_ip(); //获取客户端IP
if($ips){
if(is_string($ips)){//ip用","例如白名单IP:192.168.1.13,123.23.23.44,193.134.*.*
$ips=explode(",",$ips);
}
}else{//读取后台配置白名单IP
$obj=newSetting();
$ips=explode(",",$obj->getConfig("whiteip"));
}
if(in_array($ip,$ips)){
returntrue;
}
$ipregexp=implode('|',str_replace(array('*','.'),array('\d+','\.'),$ips));
$rs=preg_match("/^(".$ipregexp.")$/",$ip);
if($rs)returntrue;
return;
}
获取ip地址,这里引用thinkphp内置函数
//应网友要求,贴出get_client_ip()函数
/**
*获取客户端IP地址
*@paraminteger$type返回类型0返回IP地址1返回IPV4地址数字
*@paramboolean$adv是否进行高级模式获取(有可能被伪装)
*@returnmixed
*/
functionget_client_ip($type=0,$adv=false){
$type = $type?1:0;
static$ip = NULL;
if($ip!==NULL)return$ip[$type];
if($adv){
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$arr = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$pos = array_search('unknown',$arr);
if(false!==$pos)unset($arr[$pos]);
$ip = trim($arr[0]);
}elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(isset($_SERVER['REMOTE_ADDR'])){
$ip = $_SERVER['REMOTE_ADDR'];
}
}elseif(isset($_SERVER['REMOTE_ADDR'])){
$ip = $_SERVER['REMOTE_ADDR'];
}
//IP地址合法验证
$long=sprintf("%u",ip2long($ip));
$ip =$long?array($ip,$long):array('0.0.0.0',0);
return$ip[$type];
}
以上就是本文的全部内容了,希望对大家理解php检测IP有所帮助。