如何在PHP 中準確檢索使用者的IP 位址
由於使用,在PHP 中擷取使用者的IP 位址可能是一項具有挑戰性的任務代理和其他可能掩蓋真實IP 位址的因素。雖然有多種方法可用,每種方法都有其局限性,但了解最有效的方法可以確保準確的 IP 檢索。
一個常見的方法是利用 $_SERVER 全域變數。它提供了可能包含 IP 資訊的各種標頭。其中,REMOTE_ADDR保存的是最後一個已知客戶端的IP位址;然而,這種方法並不可靠,因為它很容易被欺騙。
為了解決這個問題,PHP 開發人員開發了更全面的方法,利用多個 $_SERVER 標頭。此方法涉及透過 HTTP_CLIENT_IP 檢查共用網際網路/ISP IP 位址。此外,它也透過 HTTP_X_FORWARDED_FOR、HTTP_X_FORWARDED、HTTP_X_CLUSTER_CLIENT_IP、HTTP_X_CLUSTER_CLIENT_IP、HTTP_X_CLUSTER_CLIENT_IP、
HT、FORvalidate_ip
用於過濾掉私有網路和無效IP位址。function get_ip_address(){ foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){ if (array_key_exists($key, $_SERVER) === true){ foreach (explode(',', $_SERVER[$key]) as $ip){ $ip = trim($ip); // just to be safe if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){ return $ip; } } } } }
這是問題中提供的程式碼的簡化版本:
雖然這種方法顯著提高了準確性,但它仍然容易受到可能注入自己的請求標頭的惡意用戶的影響。對於關鍵任務應用程序,建議僅依賴 REMOTE_ADDR。以上是PHP如何準確取得使用者的IP位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!