반응형
    
    
    
  PHP를 사용하여 클라이언트 IP 주소 가져오기
제 웹사이트를 이용하는 클라이언트 IP 주소를 알고 싶습니다.PHP를 사용하고 있습니다.$_SERVERsuperglobal:
$_SERVER['REMOTE_ADDR'];
 
그러나, 이것을 사용하면 올바른 IP 주소를 제공할 수 없는 것을 알 수 있습니다.IP 주소를 취득하면, IP 주소와 다른 것을 알 수 있습니다.또, 다음과 같은 Web 사이트에서도 IP 주소를 확인할 수 있습니다.
http://whatismyipaddress.com/
 
PHP 기능을 제공하는 IP 주소를 붙여 넣었지만 이 웹사이트는 이에 대한 결과를 보여주지 않았습니다.이 문제는 어떻게 발생하며 클라이언트의 IP 주소를 어떻게 얻을 수 있습니까?
방문자/클라이언트의 IP 주소를 얻는 가장 간단한 방법은$_SERVER['REMOTE_ADDR']또는$_SERVER['REMOTE_HOST']변수입니다.
그러나 방문자의 올바른 IP 주소가 반환되지 않을 수 있으므로 다른 서버 변수를 사용하여 IP 주소를 가져올 수 있습니다.
다음 두 함수는 값이 검색되는 방법 및 위치에서만 차이와 동일합니다.
getenv()는 PHP 환경변수 값을 가져오기 위해 사용됩니다.
// Function to get the client IP address
function get_client_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
       $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}
 
$_SERVER는 웹 서버에 의해 작성된 서버 변수를 포함하는 배열입니다.
// Function to get the client IP address
function get_client_ip() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}
PHP 5.3 이상에서는 다음과 같이 얻을 수 있습니다.
$ip = getenv('HTTP_CLIENT_IP')?:
getenv('HTTP_X_FORWARDED_FOR')?:
getenv('HTTP_X_FORWARDED')?:
getenv('HTTP_FORWARDED_FOR')?:
getenv('HTTP_FORWARDED')?:
getenv('REMOTE_ADDR');
    $ipaddress = '';
    if ($_SERVER['HTTP_CLIENT_IP'] != '127.0.0.1')
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if ($_SERVER['HTTP_X_FORWARDED_FOR'] != '127.0.0.1')
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if ($_SERVER['HTTP_X_FORWARDED'] != '127.0.0.1')
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if ($_SERVER['HTTP_FORWARDED_FOR'] != '127.0.0.1')
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if ($_SERVER['HTTP_FORWARDED'] != '127.0.0.1')
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if ($_SERVER['REMOTE_ADDR'] != '127.0.0.1')
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
로컬 및 LAN IP 주소의 필터를 사용해 IP 주소를 취득하는 기능은 다음과 같습니다.
function get_IP_address()
{
    foreach (array('HTTP_CLIENT_IP',
                   'HTTP_X_FORWARDED_FOR',
                   'HTTP_X_FORWARDED',
                   'HTTP_X_CLUSTER_CLIENT_IP',
                   'HTTP_FORWARDED_FOR',
                   'HTTP_FORWARDED',
                   'REMOTE_ADDR') as $key){
        if (array_key_exists($key, $_SERVER) === true){
            foreach (explode(',', $_SERVER[$key]) as $IPaddress){
                $IPaddress = trim($IPaddress); // Just to be safe
                if (filter_var($IPaddress,
                               FILTER_VALIDATE_IP,
                               FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)
                    !== false) {
                    return $IPaddress;
                }
            }
        }
    }
}
언급URL : https://stackoverflow.com/questions/15699101/get-the-client-ip-address-using-php
반응형
    
    
    
  'programing' 카테고리의 다른 글
| JavaScript에서 동적 변수 이름 사용 (0) | 2022.10.25 | 
|---|---|
| 장고 "하위 행을 추가하거나 업데이트할 수 없습니다. 외부 키 제약 조건이 실패합니다." (0) | 2022.10.25 | 
| mysql - 빈 테이블에 존재하지 않는 위치에 선택 항목 삽입 (0) | 2022.10.25 | 
| C를 사용한 JSON 해석 (0) | 2022.10.25 | 
| 기능 조기 종료? (0) | 2022.10.25 |