GetEnv ( 'remote_addr')가 빈 IP 주소를 제공하는 이유는 무엇입니까?
-
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)를 사용해보십시오. 변수에 포함 된 내용을 확인하십시오.
제휴하지 않습니다 StackOverflow