>  기사  >  백엔드 개발  >  php는 클라이언트의 실제 IP를 얻습니다.

php는 클라이언트의 실제 IP를 얻습니다.

巴扎黑
巴扎黑원래의
2016-11-23 13:50:40896검색

function GetIP(){ 
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) 
$ip = getenv("HTTP_CLIENT_IP"); 
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) 
$ip = getenv("HTTP_X_FORWARDED_FOR"); 
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) 
$ip = getenv("REMOTE_ADDR"); 
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) 
$ip = $_SERVER['REMOTE_ADDR']; 
else 
$ip = "unknown"; 
return($ip); 
}

regist=off 문제
if ($register_globals!=1) {
@extract($_SERVER, EXTR_SKIP)
@extract($_COOKIE, EXTR_SKIP)
@ extract($_SESSION, EXTR_SKIP);
@extract($_POST, EXTR_SKIP);
@extract($_FILES, EXTR_SKIP)
@extract($_GET, EXTR_SKIP); $_ENV, EXTR_SKIP);
}
그 중 REMOTE_ADDR이 이해하기 쉽습니다. HTTP_x_FORWARDED_FOR에 대해서는 미리 정해진 변수라고 되어 있는데, 인터넷에서 찾아보니 이렇게 나와 있습니다.
PHP에서는 클라이언트의 IP 주소를 얻기 위해 $_SERVER["REMOTE_ADDR"]을 사용하지만 클라이언트가 프록시 서버를 사용하여 액세스하는 경우 얻은 것은 실제 클라이언트 IP 주소가 아닌 프록시 서버의 IP 주소입니다. 프록시 서버를 통해 클라이언트의 실제 IP 주소를 얻으려면 $_SERVER["HTTP_X_FORWARDED_FOR"]를 사용하여 읽으십시오.
그러나 주의할 점은 모든 프록시 서버가 $_SERVER["HTTP_X_FORWARDED_FOR"]를 사용하여 클라이언트의 실제 IP를 읽을 수 있는 것은 아니라는 것입니다. 이 방법으로 읽은 IP 중 일부는 여전히 프록시 서버의 IP입니다.

HTTP_CLIENT_IP의 경우
'HTTP_CLIENT_IP'가 사용자 IP, 'HTTP_X_FORWARDED_FOR'이 프록시 IP라는 글이 있습니다.
해당 IP 헤더 메시지는 브라우저가 다르기 때문에 확인하지 못할 수도 있습니다. 다른 네트워크 장치는 다른 IP 헤더 메시지를 보낼 수 있습니다. 따라서 PHP는 각 IP 헤더 메시지를 판단하려고 시도하며, 하나가 있으면 그 중 하나를 가져옵니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP 객체 및 참조다음 기사:PHP 객체 및 참조