반응형
PHP를 사용하여 클라이언트 IP 주소 가져오기
제 웹사이트를 이용하는 클라이언트 IP 주소를 알고 싶습니다.PHP를 사용하고 있습니다.$_SERVER
superglobal:
$_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 |