0

この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]: C:\inetpub...\filename.phpの212行目のアドレスが abcd 形式ではありません

$ipが空白のようです。

4

4 に答える 4

11

php.net では、次のように書かれています。

サーバー API が ASAPI (IIS) の場合、この関数は機能getenvしません。したがって、使用しないようにしてください。getenv('REMOTE_ADDR')しかし$_SERVER["REMOTE_ADDR"]

でやってみました$_SERVERか?

于 2008-10-06T14:09:50.497 に答える
4

使わない理由

$_SERVER['REMOTE_ADDR'] 

$_SERVER['HTTP_X_FORWARDED_FOR']
于 2008-10-06T14:08:39.050 に答える
2

より良い解決策はすでに与えられています。それでも:

getenv('HTTP_X_FORWARD_FOR');

する必要があります

getenv('HTTP_X_FORWARDED_FOR');

ええ...時々、コンピューターは自分が理解できる文字列を持ちたがります;-)

于 2010-09-28T15:05:32.100 に答える
1

まず、getenv() は文字列をパラメーターとして受け取ります。207 行目では、次を使用する必要があります。

getenv('HTTP_X_FORWARDED_FOR')

...それ以外の:

getenv(HTTP_X_FORWARDED_FOR)

第 2 に、getenv() は異なるプラットフォームでは異なる動作を示す傾向があるため、$_SERVER を介してこれらの変数にアクセスする方がより信頼性の高いソリューションです。

また、CLI を使用してこのスクリプトを実行している場合、これらの変数は機能しない可能性があります。

var_dump($ip); を試してください。変数に何が含まれているかを確認します。

于 2008-10-06T14:18:08.530 に答える