>백엔드 개발 >PHP 튜토리얼 >PHP는 클라이언트의 IP를 얻습니다.

PHP는 클라이언트의 IP를 얻습니다.

高洛峰
高洛峰원래의
2016-10-20 13:55:54921검색

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;
}


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