PHPは実際のIPを取得できません

王林
リリース: 2023-04-07 13:52:02
オリジナル
4153 人が閲覧しました

PHPは実際のIPを取得できません

#1. ユーザーの実際の IP アドレスを取得します

public static function getClientIp() { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } if (getenv('HTTP_X_REAL_IP')) { $ip = getenv('HTTP_X_REAL_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); $ips = explode(',', $ip); $ip = $ips[0]; } elseif (getenv('REMOTE_ADDR')) { $ip = getenv('REMOTE_ADDR'); } else { $ip = '0.0.0.0'; } return $ip; }
ログイン後にコピー

注:
##$ _SERVER と getenv の違いは、getenv は IIS isapi モードで実行される PHP をサポートしていないことです。 getenv("REMOTE_ADDR") 関数は、Apache では通常、IP アドレスを取得できますが、iis では効果がありません。$_SERVER['REMOTE_ADDR'] 関数は、Apache では訪問者の IP アドレスを正常に取得できますが、iis でも効果的です。

2. REMOTE_ADDR について

この変数は、「直接送信元」の IP アドレスを取得します。いわゆる「直接送信元」とは、直接リクエストを行う顧客を指します。アドレス終了IP。単一サーバーの場合、この IP は非常に正確であり、偽造することはできません。もちろん、すべてのプログラムが単一サーバーである必要はありません。たとえば、負荷分散が使用されている場合 (負荷分散に haproxy または nginx を使用するなど)、プロセスはクライアント -> 負荷であるため、この IP は転送マシンの IP になります。バランシング -> サーバー。これは、クライアントではなくロード バランサーによって直接アクセスされるサーバーです。

3. HTTP_X_FORWARDED_FOR と HTTP_CLIENT_IP について

#負荷分散下では REMOTE_ADDR を直接使用してクライアント IP を取得することができないため、解決する必要がある問題です。したがって、負荷分散側が派生し、クライアント IP を HEAD に追加してサーバーに送信し、サーバーがクライアントの実際の IP を取得できるようにします。もちろん、いわゆる偽造品が作られますが、結局のところ、HEAD プロトコルの固定データを除いて、その他のデータはカスタマイズ可能です。

推奨チュートリアル:

PHP ビデオ チュートリアル

以上がPHPは実際のIPを取得できませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!