1. プロキシ サーバーが使用されていない場合
REMOTE_ADDR = クライアント IP
HTTP_X_FORWARDED_FOR = 値がないか表示されません
$ip = $_SERVER['REMOTE_ADDR'];
2. 透過プロキシを使用します
REMOTE_ADDR = 最後のプロキシ サーバー IP
HTTP_X_FORWARDED_FOR = クライアントの実際の IP (複数のプロキシ サーバーを通過する場合、この値は同様です: 221.5.252.160、203.98.182.163、203.129.72.215)
このタイプのプロキシは、クライアントの実際の IP もリクエストに送信します。オブジェクトの場合、実際の IP を隠すことはできません。
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
3. 通常の匿名プロキシ サーバーを使用します
REMOTE_ADDR = 最後のプロキシ サーバー IP
プロキシ サーバー IP (複数のプロキシ サーバーを通過する場合、この値は同様です: 203.98.182.163、203.98.182.163、203.129.72.215)
これにより、クライアントの実際の IP が非表示になります。ですが、サーバーはクライアントがプロキシ サーバー経由でアクセスしていることを認識します。
REMOTE_ADDR =
HTTP_X_FORWARDED_FOR =
(複数のプロキシ サーバーを通過する場合、この値は同様です: 220.4.251.159、203.98.182.163、203.129.72.215) サーバーはプロキシ サーバーを通過するときに識別できます。アクセスされましたが、偽の IP がターゲット サーバーに送信されました。
REMOTE_ADDR =
プロキシ サーバー IPHTTP_X_FORWARDED_FOR =
いいえ、値は表示されない可能性があります
この種のプロキシを使用する場合、異なるブラウザーや異なるデバイスは異なる IP ヘッダー情報を返すため、PHP は $_SERVER["REMOTE_ADDR"] を使用します。 $_SERVER[" HTTP_X_FORWARDED_FOR"] 取得された値は、null 値または「不明な」値である可能性があります。
public function ip() { //strcasecmp 比较两个字符,不区分大小写。返回0,>0,<0。 if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $ip = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $ip = $_SERVER['REMOTE_ADDR']; } $res = preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : ''; echo $res; //dump(phpinfo());//所有PHP配置信息 }
以上がPHPでクライアントのIPアドレスを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。