GetEnv ( 'remote_addr')가 빈 IP 주소를 제공하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/174393

  •  05-07-2019
  •  | 
  •  

문제

이 PHP 코드 ...

207    if (getenv(HTTP_X_FORWARDED_FOR)) {
208        $ip   = getenv('HTTP_X_FORWARD_FOR');
209        $host = gethostbyaddr($ip);
210    } else {
211        $ip   = getenv('REMOTE_ADDR');
212        $host = gethostbyaddr($ip);
213    }

이 경고를 던져 ...

경고: gethostbyaddr () [function.gethostbyaddr] : 주소는 abcd 양식이 아닙니다. C : inetpub ... filename.php 라인에 212

그것은 것 같습니다 $ IP 비어 있습니다.

도움이 되었습니까?

해결책

php.net에서 다음은 다음과 같습니다.

함수 getenv 서버 API가 ASAPI (IIS) 인 경우 작동하지 않습니다. 따라서 사용하지 마십시오 getenv('REMOTE_ADDR'), 하지만 $_SERVER["REMOTE_ADDR"].

당신은 아마 그것을 시도 했습니까? $_SERVER?

다른 팁

왜 사용하지 않습니까?

$_SERVER['REMOTE_ADDR'] 

그리고

$_SERVER['HTTP_X_FORWARDED_FOR']

더 나은 솔루션이 이미 제공되었습니다. 하지만 여전히 :

getenv('HTTP_X_FORWARD_FOR');

해야한다

getenv('HTTP_X_FORWARDED_FOR');

그래 ... 때때로 컴퓨터는 그들이 이해하는 문자열을 원한다 ;-)

우선, getenv ()는 매개 변수로 문자열을 취합니다. 207 행에서 사용해야합니다.

getenv('HTTP_X_FORWARDED_FOR')

...대신에:

getenv(HTTP_X_FORWARDED_FOR)

둘째, getenv ()가 다른 플랫폼에서 다른 동작을 표시하는 경향이 있기 때문에 $ _server를 통해 이러한 변수에 액세스하는 것은보다 신뢰할 수있는 솔루션입니다.

또한 CLI를 통해이 스크립트를 실행하는 경우 이러한 변수는 작동하지 않을 것입니다.

var_dump ($ IP)를 사용해보십시오. 변수에 포함 된 내용을 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top