/** |
* 获得用户的真实 IP 地址 |
* |
* @return NULL Ambigous unknown> |
*/ |
function get_client_ip(){ |
static $realip = NULL; |
if ( $realip !== NULL){ |
return $realip ; |
} |
if (isset( $_SERVER )){ |
if (isset( $_SERVER [ 'HTTP_X_FORWARDED_FOR' ])){ |
$arr = explode ( ',' , $_SERVER [ 'HTTP_X_FORWARDED_FOR' ]); |
/* 取X-Forwarded-For中第?个非unknown的有效IP字符? */ |
foreach ( $arr as $ip ){ |
$ip = trim( $ip ); |
if ( $ip != 'unknown' ){ |
$realip = $ip ; |
break ; |
} |
} |
} elseif (isset( $_SERVER [ 'HTTP_CLIENT_IP' ])){ |
$realip = $_SERVER [ 'HTTP_CLIENT_IP' ]; |
} else { |
if (isset( $_SERVER [ 'REMOTE_ADDR' ])){ |
$realip = $_SERVER [ 'REMOTE_ADDR' ]; |
} else { |
$realip = '0.0.0.0' ; |
} |
} |
} else { |
if ( getenv ( 'HTTP_X_FORWARDED_FOR' )){ |
$realip = getenv ( 'HTTP_X_FORWARDED_FOR' ); |
} elseif ( getenv ( 'HTTP_CLIENT_IP' )){ |
$realip = getenv ( 'HTTP_CLIENT_IP' ); |
} else { |
$realip = getenv ( 'REMOTE_ADDR' ); |
} |
} |
preg_match( "/[\d\.]{7,15}/" , $realip , $onlineip ); |
$realip = ! empty ( $onlineip [0]) ? $onlineip [0] : '0.0.0.0' ; |
return $realip ; |
} |