クライアント IP とサーバー IP を取得するための PHP メソッド
クライアント IP 関連の変数
1. $_SERVER['REMOTE_ADDR']; クライアント IP。これはユーザーの IP またはプロキシの IP です。
2. $_SERVER['HTTP_CLIENT_IP']; エージェントの IP は存在する可能性があり、偽造される可能性があります。
3. $_SERVER['HTTP_X_FORWARDED_FOR']; ユーザーがプロキシとして使用する IP は存在する可能性があり、偽造される可能性があります。
サーバー側 IP 関連の変数
1. $_SERVER["SERVER_NAME"] は、関数 gethostbyname() を使用して取得する必要があります。この変数はサーバー側とクライアント側の両方で正しく表示されます。
2. $_SERVER["SERVER_ADDR"]、サーバー側でテスト: 127.0.0.1 (これは httpd.conf の BindAddress の設定値に関連します)。クライアントでのテスト結果は正しいです。
カテゴリは次のとおりです:
class getIP{ function clientIP(){ $cIP = getenv('REMOTE_ADDR'); $cIP1 = getenv('HTTP_X_FORWARDED_FOR'); $cIP2 = getenv('HTTP_CLIENT_IP'); $cIP1 ? $cIP = $cIP1 : null; $cIP2 ? $cIP = $cIP2 : null; return $cIP; } function serverIP(){ return gethostbyname($_SERVER["SERVER_NAME"]); } } $getIP = new getIP(); $clientIp = getIP::clientIP(); $serverIp = getIP::serverIP(); echo 'Client IP is ',$clientIp,'<br />'; echo 'Server IP is ',$serverIp,'<br />'; function GetIP() { $ip = $_SERVER['REMOTE_ADDR']; if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } return $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); } echo GetIP();