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]:アドレスは   行 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)を試してください;変数の内容を確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top