在Laravel 5 取得客戶端IP 位址
使用$_SERVER["REMOTE_ADDR"] 在Laravel 位址中取得客戶端IP 位址似乎很簡單。然而,與核心 PHP 不同,Laravel 傳回伺服器的 IP,而不是訪客的。
為了解決這個問題,Laravel 使用 Request::ip()。此方法利用 Symfony 的請求物件來確定客戶端的 IP 位址。
在內部,Request::ip() 呼叫 getClientIps(),後者採用穩健的方法來擷取客戶端的 IP 位址。它首先取得伺服器的 IP 位址 (REMOTE_ADDR) 並檢查是否使用了可信任代理程式。
如果偵測到可信任代理,則會根據 Laravel 的可信任標頭配置檢查請求標頭。解析特定標頭(例如 X-Forwarded-For 和 X-Client-IP)以提取客戶端的 IP 位址。
但是,這些標頭可能不可靠,特別是當客戶端位於多個代理後面時。因此,請求的 IP 位址將會新增為 $clientIps 陣列中的最後一個元素。
然後選擇客戶端的 IP 位址作為 $clientIps 中的第一個元素。此 IP 位址可能是請求的 IP 或可信任代理程式之一。
為了確保準確性,$clientIps 中的每個 IP 位址都會根據可信任代理程式清單進行驗證。如果 IP 位址屬於受信任的代理,則會將其從陣列中刪除。
最終,Request::ip() 傳回一個 IP 位址陣列。此陣列的第一個元素表示不受信任的客戶端 IP 位址,後面跟著任何受信任代理的 IP。
以上是Laravel中如何準確取得客戶端IP位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!