0

I have to get public IP of the remote system in php. I have tried

$_SERVER['REMOTE_ADDR']

getenv('REMOTE_ADDR');

but is always returning the private IP. Help to fix it.

michelem
  • 14,430
  • 5
  • 50
  • 66

2 Answers2

1

Try this:

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

Warning: you should extend it and sanitize, since headers can be easily manipulated.

Claudio Bredfeldt
  • 1,423
  • 16
  • 27
  • When i try $_SERVER["HTTP_X_FORWARDED_FOR"] in online phpfiddle it is returning the both private and public ip but in my server is empty is there any thing to be done in php ini file ?? – Vignesh Palanichamy Sep 04 '15 at 06:33
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();
Louiela
  • 34
  • 4