PHP에서 Client IP 주소를 조회하는 방법을 정리합니다.
보통은 아래 명령어로 간단하게 조회가 가능합니다.
$ip = $_SERVER["REMOTE_ADDR"];
하지만 해당 명령어는 네트워크 상황에 따라 부정확한 경우가 많습니다.
프록시 서버나 게이트웨이 등 주로 경유를 하는 경우 문제가 됩니다.
그래서 좀 더 세밀한 체크가 필요합니다.
물론 아래 명령어도 조금 더 정확할 뿐이지 완벽하지는 않습니다.
if($_SERVER["HTTP_CLIENT_IP"]) { $ip = $_SERVER["HTTP_CLIENT_IP"]; } else if($_SERVER["HTTP_X_FORWARDED_FOR"]) { $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if($_SERVER["HTTP_X_FORWARDED"]) { $ip = $_SERVER["HTTP_X_FORWARDED"]; } else if($_SERVER["HTTP_FORWARDED_FOR"]) { $ip = $_SERVER["HTTP_FORWARDED_FOR"]; } else if($_SERVER["HTTP_FORWARDED"]) { $ip = $_SERVER["HTTP_FORWARDED"]; } else if($_SERVER["REMOTE_ADDR"]) { $ip = $_SERVER["REMOTE_ADDR"]; } else { $ip = "UNKNOWN"; }
참고로 $_SERVER 변수는 웹서버에서 조회하는 값입니다.
PHP 환경 변수로 조회하려면, getenv()를 활용하면 됩니다.
둘 다 속성값이나 결과값은 동일합니다.
$ip = $_SERVER["REMOTE_ADDR"]; $ip = getenv("REMOTE_ADDR");