ホームページ  >  記事  >  バックエンド開発  >  PHPでクライアントIPを取得する際のエラーを解決する方法

PHPでクライアントIPを取得する際のエラーを解決する方法

PHPz
PHPzオリジナル
2023-04-03 11:49:54833ブラウズ

PHP プログラミングのプロセスでは、クライアント IP を取得することが非常に一般的な要件です。クライアント IP の取得は簡単ではなく、エラーが発生しやすいです。今日はよくある間違いについて説明します。

間違い 1: $_SERVER['REMOTE_ADDR'] の使用

初心者は、この一般的な変数を使用してクライアント IP アドレスを取得できます:

$ip = $_SERVER['REMOTE_ADDR'];

このメソッドは実際にクライアント IP です。を取得できますが、クライアントがプロキシ サーバー経由でアクセスする場合、この変数はクライアントの実際の IP ではなく、プロキシ サーバーの IP アドレスを返します。

エラー 2: $_SERVER['REMOTE_ADDR'] の再利用

もう 1 つの間違いは、$_SERVER['REMOTE_ADDR'] 変数を再利用すること、つまり、変数を複数回取得することです。リクエストの処理時に $_SERVER['REMOTE_ADDR'] が設定されるため、このメソッドは通常、同じ IP を返します。

$ip = $_SERVER['REMOTE_ADDR'];
$ip2 = $_SERVER['REMOTE_ADDR'];

エラー 3: 間違ったヘッダー情報の取得

次のアドレスにアクセスすると、リクエスト ヘッダー情報を表示できます:

http://httpbin.org/headers

多くのチュートリアルでは、HTTP_X_FORWARDED_FOR または HTTP_CLIENT_IP を使用してクライアント IP アドレスを取得します。ただし、プロキシ サーバーが異なれば配信に異なる識別子が使用される可能性があるため、このアプローチは最適ではありません。

これには、クライアント IP を確実に取得するために、サーバー構成ファイルで正しいプロキシ サーバー IP アドレスを使用する必要があります。具体的な方法については、以下のコードを参照してください。

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} 
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} 
else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

エラー 4: プロキシ サーバーの後にプロトコル エラーが発生します

プロキシ サーバーの背後で作業していて、PHP で HTTP を検出したい場合は、プロトコルhttp または https の場合は、次のコードを使用できます:

if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) {
    $protocol = 'https://';
} 
else {
    $protocol = 'http://';
}

エラー 5: IIS サーバーでの IP 取得エラー

IIS サーバーで作業している場合は、$_SERVER['REMOTE_ADDR'] を使用してください。 IP アドレスを入力すると、次のエラーが発生する場合があります:

$_SERVER['REMOTE_ADDR'] returns 127.0.0.1 in IIS for local requests

この問題を解決するには多くの方法がありますが、その 1 つは次のコードを使用することです:

if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    $ip = array_shift($ip);
} 
else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

概要

正解 クライアント IP アドレスを正確に取得することは頭の痛い問題ですが、機密データを扱う場合には非常に重要です。上記のエラーは、日常的に発生する可能性のある問題のほんの一部にすぎませんが、正しい方法を習得し、サーバー構成ファイルを使用することで、これらの問題を回避できます。

以上がPHPでクライアントIPを取得する際のエラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。