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;
}