クライアントの実際の IP を取得するためのアイデアの一部の分析は正しくない可能性がありますが、少なくとも精度ははるかに優れています。
コードは次のとおりです:
function GetIP(){ if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; return($ip); }
regist=off問題
if ($register_globals!=1) {
@extract($_SERVER, EXTR_SKIP);
@extract($_COOKIE, EXTR_SKIP);
@extract($_SESSION, EXTR_SKIP);
@extract($_FILES, EXTR_SKIP); EXTR_SKIP) ;
}
このうち、REMOTE_ADDR は事前に定義された変数であると記載されており、HTTP_x_FORWARDED_FOR については、
$_SERVER["REMOTE_ADDR" を使用する) と書かれています。 ] PHP でクライアントの IP アドレスを取得しますが、クライアントがプロキシ サーバーを使用してアクセスする場合、取得されるのはプロキシ サーバーの IP アドレスであり、実際のクライアントの IP アドレスではありません。プロキシ サーバー経由でクライアントの実際の IP アドレスを取得するには、$_SERVER["HTTP_X_FORWARDED_FOR"] を使用して読み取ります。
ただし、すべてのプロキシ サーバーが $_SERVER["HTTP_X_FORWARDED_FOR"] を使用してクライアントの実際の IP を読み取ることができるわけではないことに注意してください。このメソッドで読み取られる IP の一部は、依然としてプロキシ サーバーの IP です。
HTTP_CLIENT_IP に関しては、「HTTP_CLIENT_IP」はユーザーの IP、「HTTP_X_FORWARDED_FOR」はプロキシの IP であるという投稿があります。
これらの IP ヘッダー メッセージは利用できない可能性があります (異なるブラウザーや異なるネットワーク デバイスが異なるメッセージを送信する可能性があるため)。 IP ヘッダー メッセージ)。したがって、PHP は各 IP ヘッダー メッセージを判断し、存在する場合はそのいずれかを取得します。
以上がPHPでユーザークライアントの実際のIPを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。