2015-09-04 1 views
0

Мне нужно получить публичный IP-адрес удаленной системы в php. Я попыталсяКак получить общедоступный IP-адрес клиента в php

$_SERVER['REMOTE_ADDR'] 

getenv('REMOTE_ADDR'); 

но всегда возвращается частный IP. Помогите исправить это.

+0

Пробовал ли вы '$ _SERVER [" HTTP_X_FORWARDED_FOR "]'? –

+3

Возможный дубликат [Как получить IP-адрес клиента в PHP?] (Http://stackoverflow.com/questions/3003145/how-to-get-the-client-ip-address-in-php) – Pindo

+0

Ya i try $ _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(); 
Смежные вопросы