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]:アドレスは 行 212
の C:\ inetpub ... \ filename.php のa.b.c.d形式ではない
$ ip は空白のようです。
解決
php.netでは、次のように表示されます。
サーバーAPIがASAPI(IIS)の場合、関数
getenv
は機能しません。 そのため、getenv( 'REMOTE_ADDR')
は使用せず、$ _ SERVER [" REMOTE_ADDR"]
を使用しないでください。
$ _ SERVER
で試してみましたか?
他のヒント
使用しない理由
使用しない理由
使用しない理由
使用しない理由
<*>
and
<*>SERVER['REMOTE_ADDR']
and
<*>SERVER['HTTP_X_FORWARDED_FOR']
and
<*>SERVER['REMOTE_ADDR']
and
<*>より良い解決策がすでに提供されています。それでも:
getenv('HTTP_X_FORWARD_FOR');
あるべき
getenv('HTTP_X_FORWARDED_FOR');
はい...コンピュータは、理解できる文字列を必要とする場合があります;-)
まず、getenv()はパラメーターとして文字列を取ります。 207行目では、次を使用する必要があります。
getenv('HTTP_X_FORWARDED_FOR')
...ではなく:
getenv(HTTP_X_FORWARDED_FOR)
第二に、$ _ SERVERを介してこれらの変数にアクセスすると、getenv()が異なるプラットフォームで異なる動作を表示する傾向があるため、より信頼性の高いソリューションです。
また、CLIを介してこのスクリプトを実行している場合、これらの変数はおそらく機能しません。
var_dump($ ip)を試してください;変数の内容を確認してください。
所属していません StackOverflow