1.如果项目放在cdn,进行了加速,打印$_SERVER,里面的参数会有
[“HTTP_CDN_SRC_IP”]=>
string(15) “112.114.105.123”
[“HTTP_X_ORIGINAL_FORWARDED_FOR”]=>
string(15) “112.114.105.123” //是否会有多个ip出现,有待验证
2.如果项目是有代理的话,会有参数
[“HTTP_X_FORWARDED_FOR”]=> string(13) “14.204.95.125” //可能会有多个ip
[“HTTP_X_REAL_IP”]=> string(13) “14.204.95.125”
3.有可能会一起出现1和2步骤的参数
4.获取ip的流程如下:
function getIP(){
//优化判断,在有cdn的情况下
if(isset($_SERVER['HTTP_CDN_SRC_IP'])){
//为了兼容百度的CDN,所以转成数组
$ip = trim($_SERVER['HTTP_CDN_SRC_IP']);
}elseif(isset($_SERVER['HTTP_X_REAL_IP'])){
//代理模式下
$ip = trim($_SERVER['HTTP_X_REAL_IP']);
}else{
//前两种情况下都没有ip的时候
$ip = trim($_SERVER['REMOTE_ADDR']);
}
return $ip;
}