클라이언트의 실제 IP를 얻는 방법은 무엇입니까? 알림: [8] 정의되지 않은 변수: ip 이 오류를 수정하는 방법은 무엇입니까?

WBOY
풀어 주다: 2016-08-20 09:04:00
원래의
1343명이 탐색했습니다.

HTTP_CLIENT_IP
HTTP_X_FORWARD_IP
REMOTE_ADDR

순차적으로 감지하나요? 아니면 다른 방법이 있나요? IP138을 제외하고?

가장 엄격한 문법을 사용하여 다음 작성 방법에 문제가 있나요? 어떻게 바꿀 수 있나요?

<code>    function Getip() {
        
        if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
            $ip = $_SERVER["HTTP_CLIENT_IP"];
        }
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {//获取代理ip
            $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        }

        if ($ip) {
            $ips = array_unshift($ips, $ip);
        }
        $count = count($ips);
        for ($i = 0; $i < $count; $i++) {
            if (!preg_match("/^(10|172\.16|192\.168)\./i", $ips[$i])) {//排除局域网ip
                $ip = $ips[$i];
                break;
            }
        }
        $tip = $ip ? $ip : $_SERVER['REMOTE_ADDR'];
        if ($tip == "127.0.0.1") {//获得本地真实IP
            return $this -> get_onlineip();
        } else {
            return $tip;
        }

    }</code>
로그인 후 복사
로그인 후 복사

아니면 다음 기능을 사용하시나요?

<code>// 定义一个函数getIP() 
function getIP() 
{ 
global $ip; 

if (getenv("HTTP_CLIENT_IP")) 
$ip = getenv("HTTP_CLIENT_IP"); 
else if(getenv("HTTP_X_FORWARDED_FOR")) 
$ip = getenv("HTTP_X_FORWARDED_FOR"); 
else if(getenv("REMOTE_ADDR")) 
$ip = getenv("REMOTE_ADDR"); 
else 
$ip = "Unknow"; 

return $ip; 
} 

</code>
로그인 후 복사
로그인 후 복사

답글 내용:

HTTP_CLIENT_IP
HTTP_X_FORWARD_IP
REMOTE_ADDR

순차적으로 감지하나요? 아니면 다른 방법이 있나요? IP138을 제외하고?

가장 엄격한 구문을 사용하는 다음 작성 방법에 문제가 있나요? 어떻게 바꿀 수 있나요?

<code>    function Getip() {
        
        if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
            $ip = $_SERVER["HTTP_CLIENT_IP"];
        }
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {//获取代理ip
            $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        }

        if ($ip) {
            $ips = array_unshift($ips, $ip);
        }
        $count = count($ips);
        for ($i = 0; $i < $count; $i++) {
            if (!preg_match("/^(10|172\.16|192\.168)\./i", $ips[$i])) {//排除局域网ip
                $ip = $ips[$i];
                break;
            }
        }
        $tip = $ip ? $ip : $_SERVER['REMOTE_ADDR'];
        if ($tip == "127.0.0.1") {//获得本地真实IP
            return $this -> get_onlineip();
        } else {
            return $tip;
        }

    }</code>
로그인 후 복사
로그인 후 복사

아니면 다음 기능을 사용하시나요?

<code>// 定义一个函数getIP() 
function getIP() 
{ 
global $ip; 

if (getenv("HTTP_CLIENT_IP")) 
$ip = getenv("HTTP_CLIENT_IP"); 
else if(getenv("HTTP_X_FORWARDED_FOR")) 
$ip = getenv("HTTP_X_FORWARDED_FOR"); 
else if(getenv("REMOTE_ADDR")) 
$ip = getenv("REMOTE_ADDR"); 
else 
$ip = "Unknow"; 

return $ip; 
} 

</code>
로그인 후 복사
로그인 후 복사

현재로서는 이 방법이 가장 안전합니다.
ip138은 방문자의 IP만 가져올 수 있습니다. 서버 접속인 경우 해당 서버의 IP입니다

현재 이 요구 사항에 대한 연구는 많지 않습니다. 일반적인 작업에서는 순차적 감지를 통해 얻습니다.

실제로 일반 사용자는 자신의 IP를 고의로 숨기지 않으며 여러 계층의 프록시를 통해 서비스에 액세스하지도 않습니다. 따라서 일반 사용자의 경우 이 세 가지를 순서대로 판단하면 충분합니다. 획득률도 상당히 높습니다.

좋은 질문입니다. 실제로 쉽게 해결할 수 있는 문제는 아닙니다. 일부 클라이언트 IP에는 사기 및 프록시 문제가 있으므로 이를 100% 얻을 수는 없습니다. 그러나 다른 네티즌들이 말했듯이 프록시를 사용하는 일반 사용자는 여전히 매우 적습니다. 자신만의 방법을 사용하거나 다른 타사 라이브러리를 참조하여 IP를 얻을 수 있다고 생각합니다

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿