Как получить IP-адрес пользователя в PHP?

Я использую код ниже, чтобы получить реальный IP-адрес пользователя.

function getUserIP () { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('HTTP_X_FORWARDED')) { $ip = getenv('HTTP_X_FORWARDED'); } elseif (getenv('HTTP_FORWARDED_FOR')) { $ip = getenv('HTTP_FORWARDED_FOR'); } elseif (getenv('HTTP_FORWARDED')) { $ip = getenv('HTTP_FORWARDED'); } else { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } $userIP = getUserIP(); 

Иногда я получаю, что IP-адрес 67.143.220.112, 67.142.171.26 .

Это правильный IP-адрес пользователя или мне нужно сделать что-то еще, чтобы получить реальный IP-адрес пользователя?

$_SERVER['REMOTE_ADDR']; дает IP-адрес пользователя.

Идеальный метод получения IP-адреса пользователя.

 <?PHP function getUserIP() { $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; } $user_ip = getUserIP(); echo $user_ip; // Output User IP address [Ex: 177.87.193.134] ?> 

Единственный 100% -ный надежный адрес, который вы можете получить, – $_SERVER['REMOTE_ADDR'] . Другие заголовки являются необязательными, не всегда присутствующими и тривиально подделанными, поскольку они являются информационными.

Даже REMOTE_ADDR будет ошибочным, если пользователь находится за одним или несколькими прокси-серверами и / или шлюзами NAT. Короче говоря, нет надежного способа идеально идентифицировать реальный IP-адрес пользователя независимо от проксирования / NAT.