在PHP 中檢索客戶端的IP 位址
PHP 的$_SERVER 超全域訪客提供了一種檢索網站訪問者IP 位址的方法。但是,使用傳統的 $_SERVER['REMOTE_ADDR'] 方法可能會傳回不正確的 IP 位址。這種差異可能是由多種因素造成的,包括代理伺服器和負載平衡器。
要取得準確的 IP 位址,請考慮替代伺服器變數。以下兩個函數可以互換,並示範如何執行此操作:
使用getenv():
function get_client_ip() { $ipaddress = ''; if (getenv('HTTP_CLIENT_IP')) $ipaddress = getenv('HTTP_CLIENT_IP'); else if(getenv('HTTP_X_FORWARDED_FOR')) $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); else if(getenv('HTTP_X_FORWARDED')) $ipaddress = getenv('HTTP_X_FORWARDED'); else if(getenv('HTTP_FORWARDED_FOR')) $ipaddress = getenv('HTTP_FORWARDED_FOR'); else if(getenv('HTTP_FORWARDED')) $ipaddress = getenv('HTTP_FORWARDED'); else if(getenv('REMOTE_ADDR')) $ipaddress = getenv('REMOTE_ADDR'); else $ipaddress = 'UNKNOWN'; return $ipaddress; }
使用$_SERVER:
function get_client_ip() { $ipaddress = ''; if (isset($_SERVER['HTTP_CLIENT_IP'])) $ipaddress = $_SERVER['HTTP_CLIENT_IP']; else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_X_FORWARDED'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED']; else if(isset($_SERVER['HTTP_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_FORWARDED'])) $ipaddress = $_SERVER['HTTP_FORWARDED']; else if(isset($_SERVER['REMOTE_ADDR'])) $ipaddress = $_SERVER['REMOTE_ADDR']; else $ipaddress = 'UNKNOWN'; return $ipaddress; }
這些函數優先考慮伺服器變數中可用的最可靠的IP位址選項,確保準確表示客戶端的 IP 位址。
以上是如何在 PHP 中可靠地檢索客戶端的 IP 位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!