1.REMOTE_ADDR: 현재 페이지를 탐색 중인 사용자 컴퓨터의 IP 주소
2.HTTP_X_FORWARDED_FOR: 현재 페이지를 탐색 중인 사용자 컴퓨터의 게이트웨이
3.HTTP_CLIENT_IP: 클라이언트 IP
PHP에서는 $_SERVER["REMOTE_ADDR"]을 사용하여 클라이언트의 IP 주소를 얻습니다. 그러나 클라이언트가 프록시 서버를 사용하여 액세스하는 경우 얻는 것은 실제 클라이언트 IP 주소가 아니라 프록시 서버의 IP 주소입니다. 프록시 서버를 통해 클라이언트의 실제 IP 주소를 얻으려면 $_SERVER["HTTP_X_FORWARDED_FOR"]를 사용하여 읽으십시오.
그러나 주의할 점은 모든 프록시 서버가 $_SERVER["HTTP_X_FORWARDED_FOR"]를 사용하여 클라이언트의 실제 IP를 읽을 수 있는 것은 아니라는 점입니다. 이 방법으로 읽은 IP 중 일부는 여전히 프록시의 IP입니다. 서버.
또 주의할 점은 클라이언트가 프록시 서버를 통해 접속하지 않으면 $_SERVER["HTTP_X_FORWARDED_FOR"]로 얻은 값이 비어 있게 된다는 점입니다.
/** * 获取客户端IP * @return string */ function get_client_ip() { $realip = ""; if ($_SERVER['HTTP_X_FORWARDED_FOR'] && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else if ($_SERVER['HTTP_CLIENT_IP'] && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['HTTP_CLIENT_IP']; } else if($_SERVER['REMOTE_ADDR'] && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['REMOTE_ADDR']; } return $realip; }