獲取當前客戶端IP信息 - 新浪接口

<?php

/**
 * IP 地址工具
 * @author Carey
 * 
 * 調用方法  :
 * 		$ipInfo = new IPTools();
 * 		$ipInfo->getRealiP( '222.41.213.122' ); / $ipInfo->getRealiP();
 * 
 * return array | 當前ip所在省市區信息
 * 
 */

class IPTools {
	
	function __construct( )
	{
	
	}
	
	/**
	 * 獲取當前的ip地址
	 * @return Ambigous <unknown, string>
	 */
	private function __getCurrentIp()
	{
		$realip = '';
		$unknown = 'unknown';
		if ( isset($_SERVER) )
		{
			if( isset($_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) && !empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) && strcasecmp( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ], $unknown ) )
			{
				$arr = explode( ',', $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] );
				foreach($arr as $ip)
				{
					$ip = trim($ip);
					if ($ip != 'unknown')
					{
						$realip = $ip;
						break;
					}
				}
			}
			else if( isset( $_SERVER[ 'HTTP_CLIENT_IP' ] ) && !empty( $_SERVER[ 'HTTP_CLIENT_IP' ] ) && strcasecmp( $_SERVER[ 'HTTP_CLIENT_IP' ], $unknown ) )
			{
				$realip = $_SERVER[ 'HTTP_CLIENT_IP' ];
			}
			else if( isset( $_SERVER[ 'REMOTE_ADDR' ] ) && !empty( $_SERVER[ 'REMOTE_ADDR' ] ) && strcasecmp( $_SERVER[ 'REMOTE_ADDR' ], $unknown ) )
			{
				$realip = $_SERVER[ 'REMOTE_ADDR' ];
			}
			else
			{
				$realip = $unknown;
			}
		}
		else
		{
			if( getenv( 'HTTP_X_FORWARDED_FOR' ) && strcasecmp( getenv( 'HTTP_X_FORWARDED_FOR' ), $unknown ) )
			{
				$realip = getenv( "HTTP_X_FORWARDED_FOR" );
			}
			else if( getenv( 'HTTP_CLIENT_IP' ) && strcasecmp( getenv( 'HTTP_CLIENT_IP' ), $unknown ) )
			{
				$realip = getenv( "HTTP_CLIENT_IP" );
			}
			else if( getenv( 'REMOTE_ADDR' ) && strcasecmp( getenv( 'REMOTE_ADDR' ), $unknown ) )
			{
				$realip = getenv("REMOTE_ADDR");
			}
			else
			{
				$realip = $unknown;
			}
		}
		$realip = preg_match( "/[\d\.]{7,15}/", $realip, $matches ) ? $matches[0] : $unknown;
		
		return $realip;
	}
	
	/**
	 * 獲取當前ip地址詳細信息
	 * @param string $ip
	 * @return boolean|unknown
	 */
	public function getRealiP( $ip = '' )
	{
		if( empty($ip) )
			$ip = $this->__getCurrentIp();
		
		$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']);
		}
		else
			return false;
		
		return $json;
	}
	
}

?>


發佈了122 篇原創文章 · 獲贊 112 · 訪問量 39萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章