>백엔드 개발 >PHP 문제 >PHP로 얻은 IP가 정확하지 않으면 어떻게 해야 하나요?

PHP로 얻은 IP가 정확하지 않으면 어떻게 해야 하나요?

藏色散人
藏色散人원래의
2021-02-24 10:03:573025검색

PHP에서 획득한 IP가 정확하지 않은 것은 사용자가 프록시를 사용했기 때문일 수 있으므로 "$_SERVER['REMOTE_ADDR']"는 사용자의 실제 IP를 인식할 수 없습니다. 해결 방법은 "X-Forwarded-For"를 정의하여 획득하는 것입니다. " 엔터티 헤더 실제 IP입니다.

PHP로 얻은 IP가 정확하지 않으면 어떻게 해야 하나요?

이 문서의 운영 환경: Windows 7 시스템, PHP7.1, Dell G3 컴퓨터.

php로 얻은 IP는 진짜가 아닌가요?

여러분, 갑자기 뭔가가 일어났습니다. 우리는 서버의 인트라넷 IP(아마도 서버의 프록시 IP)를 얻기 위해 일반적인 $_SERVER['REMOTE_ADDR'];을 사용하지 않습니다. 해당 코드에는 문제가 없으며 역방향 프록시(nginx 등)를 사용하고 사용자도 프록시를 사용할 수 있으므로 간단한 $_SERVER['REMOTE_ADDR']로는 사용자의 실제 IP를 감지할 수 없습니다.

하지만 프록시 IP를 통해 실제 사용자의 주소를 알아낼 수 있는 매개변수가 있습니다. HTTP 프로토콜을 확장합니다. X-Forwarded-For라는 엔터티 헤더가 정의됩니다.

이를 주로 광고 스타를 대상으로 고려하기 때문에 결국 다른 사람들도 대리인 역할을 하여 매출을 늘릴 수 있습니다.

【추천: PHP 비디오 튜토리얼

코드는 다음과 같습니다:

//获取用户IP地址
    public function getIp()
    {
        if(!empty($_SERVER["HTTP_CLIENT_IP"]))
        {
            $cip = $_SERVER["HTTP_CLIENT_IP"];
        }
        else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
        {
            $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        }
        else if(!empty($_SERVER["REMOTE_ADDR"]))
        {
            $cip = $_SERVER["REMOTE_ADDR"];
        }
        else
        {
            $cip = '';
        }
        preg_match("/[\d\.]{7,15}/", $cip, $cips);
        $cip = isset($cips[0]) ? $cips[0] : 'unknown';
        unset($cips);
        return $cip;
    }

위 내용은 PHP로 얻은 IP가 정확하지 않으면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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