自己封着玩
很明显,get_onlineip()大部分情况下是得到的本地的IP,比如,127.0.0.1;在本地测试的情况下,而get_public_ip()得到的是公网的ipGetIpLookup是得到IP和地址,或者说是根据IP得到当前地址,并返回地址和IP
function get_onlineip() { //得到IP地址
$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;
}
function get_public_ip() {//得到公网IP地址
$getlink = curl_init();
curl_setopt($getlink, CURLOPT_URL, "http://city.ip138.com/ip2city.asp");
curl_setopt($getlink, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($getlink, CURLOPT_HEADER, 0);
$ip_str = curl_exec($getlink);
preg_match('/\[(.*)\]/', $ip_str, $public_ip);
curl_close($getlink);
return $public_ip;
}
function GetIpLookup(){
$ip=get_public_ip();
$ip=isset($ip[1])?$ip[1]:'';
if(empty($ip)){
$ip = get_onlineip();
}
$res = @file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=' . $ip);
if(empty($res)){ return false; }
$jsonMatches = array();
preg_match('#\{.+?\}#', $res, $jsonMatches);
if(!isset($jsonMatches[0])){ return false; }
$json = json_decode($jsonMatches[0], true);
if(isset($json['ret']) && $json['ret'] == 1){
$json['ip'] = $ip;
unset($json['ret']);
}
return $json;
}