PHP获取真实的网络IP

function get_client_ip() {
    $ip = $_SERVER[‘REMOTE_ADDR‘];
    if (isset($_SERVER[‘HTTP_CLIENT_IP‘]) && preg_match(‘/^([0-9]{1,3}\.){3}[0-9]{1,3}$/‘, $_SERVER[‘HTTP_CLIENT_IP‘])) {
        $ip = $_SERVER[‘HTTP_CLIENT_IP‘];
    } elseif(isset($_SERVER[‘HTTP_X_FORWARDED_FOR‘]) AND preg_match_all(‘#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s‘, $_SERVER[‘HTTP_X_FORWARDED_FOR‘], $matches)) {
        foreach ($matches[0] AS $xip) {
            if (!preg_match(‘#^(10|172\.16|192\.168)\.#‘, $xip)) {
                $ip = $xip;
                break;
            }
        }
    }
	//  A类:10.0.0.0-10.255.255.255
	//	B类:172.16.0.0-172.31.255.255 
	//	C类:192.168.0.0-192.168.255.255
	//局域网IP或者本地IP段开头
	$juyuwangIps = array( ‘10.‘ , ‘127.0.0.1‘ , ‘192.168.‘ );
	for( $i = 16 ; $i <= 31 ; $i++ )
	{
		$juyuwangIps[] = ‘172.‘ . $i . ‘.‘;
	}
	//如果是本地IP则找出网络IP
	foreach( $juyuwangIps as $cIp )
	{
		if( strpos( $ip ,$cIp ) === 0 )
		{
			if( $wIp = get_onlineip() )
			{
				$ip = $wIp;
			}
			break;
		}
	}
	
    return $ip;
}
function get_onlineip() {
    $ch = curl_init(‘http://1111.ip138.com/ic.asp‘);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $a  = curl_exec($ch);
    preg_match(‘/\[(.*)\]/‘, $a, $ip);
	if( is_array( $ip ) && isset( $ip[1] ) && !empty( $ip[1] )  )
	{
		return $ip[1];
	}
    return ‘‘;
 }

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。