大家个别都是用$_SERVER['REMOTE_ADDR']来获取用户IP,通过我的钻研有两种办法来获取用户的真实外网IP。
大家个别都是用$_SERVER['REMOTE_ADDR']来获取用户IP,
然而假如应用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。
通过我的钻研有两种办法来获取用户的真实外网IP。
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
function
get_onlineip() {
$ch = curl_init( ' http://www.ip138.com/ip2city.asp ' );
curl_setopt( $ch , CURLOPT_RETURNTRANSFER , true );
$a = curl_exec( $ch );
preg_match ( ' /\[(.*)\]/ ' , $a , $ip );
return $ip [ 1 ];
}
$ch = curl_init( ' http://www.ip138.com/ip2city.asp ' );
curl_setopt( $ch , CURLOPT_RETURNTRANSFER , true );
$a = curl_exec( $ch );
preg_match ( ' /\[(.*)\]/ ' , $a , $ip );
return $ip [ 1 ];
}
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
function
get_onlineip() {
$onlineip = '' ;
if ( getenv ( ' HTTP_CLIENT_IP ' ) && strcasecmp ( getenv ( ' HTTP_CLIENT_IP ' ) , ' unknown ' )) {
$onlineip = getenv ( ' HTTP_CLIENT_IP ' );
} elseif ( getenv ( ' HTTP_X_FORWARDED_FOR ' ) && strcasecmp ( getenv ( ' HTTP_X_FORWARDED_FOR ' ) , ' unknown ' )) {
$onlineip = getenv ( ' HTTP_X_FORWARDED_FOR ' );
} elseif ( getenv ( ' REMOTE_ADDR ' ) && strcasecmp ( getenv ( ' REMOTE_ADDR ' ) , ' unknown ' )) {
$onlineip = getenv ( ' REMOTE_ADDR ' );
} elseif ( isset ( $_SERVER [ ' REMOTE_ADDR ' ]) && $_SERVER [ ' REMOTE_ADDR ' ] && strcasecmp ( $_SERVER [ ' REMOTE_ADDR ' ] , ' unknown ' )) {
$onlineip = $_SERVER [ ' REMOTE_ADDR ' ];
}
return $onlineip ;
}
$onlineip = '' ;
if ( getenv ( ' HTTP_CLIENT_IP ' ) && strcasecmp ( getenv ( ' HTTP_CLIENT_IP ' ) , ' unknown ' )) {
$onlineip = getenv ( ' HTTP_CLIENT_IP ' );
} elseif ( getenv ( ' HTTP_X_FORWARDED_FOR ' ) && strcasecmp ( getenv ( ' HTTP_X_FORWARDED_FOR ' ) , ' unknown ' )) {
$onlineip = getenv ( ' HTTP_X_FORWARDED_FOR ' );
} elseif ( getenv ( ' REMOTE_ADDR ' ) && strcasecmp ( getenv ( ' REMOTE_ADDR ' ) , ' unknown ' )) {
$onlineip = getenv ( ' REMOTE_ADDR ' );
} elseif ( isset ( $_SERVER [ ' REMOTE_ADDR ' ]) && $_SERVER [ ' REMOTE_ADDR ' ] && strcasecmp ( $_SERVER [ ' REMOTE_ADDR ' ] , ' unknown ' )) {
$onlineip = $_SERVER [ ' REMOTE_ADDR ' ];
}
return $onlineip ;
}