在PHP 中確定客戶端的IP 位址
PHP 超全域數組$_SERVER 提供對各種伺服器相關資訊的訪問,包括客戶端的遠端資訊透過$_SERVER['REMOTE_ADDR'] 的IP 位址。但這種方法在特定場景下可能會存在不足。
如果 $_SERVER['REMOTE_ADDR'] 值不正確,可以使用替代伺服器變數來準確取得 IP 位址。以下探討兩種方法:
使用 getenv() 函數:
getenv() 函數擷取環境變數的值。它可以用來取得客戶端的 IP 位址,如下所示:
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 超全域陣列:
$_SERVER 陣列包含 HTTP 請求資訊。以下程式碼示範了其在取得 IP 位址方面的用途:
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; }
兩種方法都提供相同的功能,但存取資訊的方式有所不同。
以上是PHP如何準確判斷客戶端IP位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!