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를 얻을 수 있다고 생각합니다