<?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;
}
}
?>
獲取當前客戶端IP信息 - 新浪接口
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.