2015-09-04 100 views
0

我必須在php中獲取遠程系統的公共IP。 我試過如何在php中獲取客戶端的公共ip

$_SERVER['REMOTE_ADDR'] 

getenv('REMOTE_ADDR'); 

但是總是返回私有IP。幫助解決它。

+0

你試過'$ _SERVER [「HTTP_X_FORWARDED_FOR」]'? –

+3

[如何在PHP中獲取客戶端IP地址?](http://stackoverflow.com/questions/3003145/how-to-get-the-client-ip-address-in-php) – Pindo

+0

Ya i嘗試$ _SERVER ['HTTP_X_FORWARDED_FOR']也@Michelem –

回答

1

試試這個:

$ip = !empty($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : (!empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']); 

警告:你應該繼承它和消毒,因爲頭可以很容易地操縱。

+0

當我嘗試$ _SERVER [「HTTP_X_FORWARDED_FOR」]在線phpfiddle它是返回私人和公共IP,但在我的服務器是空的是否有任何事情要做的PHP ini文件? –

0
private function getIP() 
{ 
    $client = @$_SERVER['HTTP_CLIENT_IP']; 
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; 
    $remote = $_SERVER['REMOTE_ADDR']; 

    if(filter_var($client, FILTER_VALIDATE_IP)) 
    { 
     $ip = $client; 
    } 
    elseif(filter_var($forward, FILTER_VALIDATE_IP)) 
    { 
     $ip = $forward; 
    } 
    else 
    { 
     $ip = $remote; 
    } 

    return $ip; 
} 
echo getIP();