在 PHP 中獲取使用者 IP 地址
-
在 PHP 中使用
$_SERVER['REMOTE_ADDR']
查詢使用者的 IP 地址 -
使用
$_SERVER['REMOTE_ADDR']
、$_SERVER['HTTP_CLIENT_IP']
和$_SERVER['HTTP_X_FORWARDED_FOR']
查詢使用者的 IP 地址 -
使用三元運算子和
isset()
函式查詢使用者的 IP 地址
我們將介紹一種使用 $_SERVER
超級全域性變數(唯一的陣列元素是 REMOTE_ADDR
)從 PHP 伺服器中訪問使用者 IP 地址的方法。它用作 $_SERVER['REMOTE_ADDR']
。
我們將演示使用條件表示式檢查使用者 IP 地址是來自共享 Internet,代理還是真實 IP 地址,這是使用條件表示式訪問 PHP 使用者 IP 地址的另一種方法。該方法使用陣列元素,例如 HTTP_CLIENT_IP
,HTTP_X_FORWARDED_FOR
和 REMOTE_ADDR
。
我們將向你展示一種使用三元運算子和 isset()
函式在 PHP 中獲取使用者 IP 地址的簡便方法。此方法還使用超全域性變數 $_SERVER
中的陣列元素,例如 HTTP_CLIENT_IP
,HTTP_X_FORWARDED_FOR
和 REMOTE_ADDR
。
在 PHP 中使用 $_SERVER['REMOTE_ADDR']
查詢使用者的 IP 地址
我們可以使用 $_SERVER['REMOTE_ADDR']
表示式查詢使用者訪問當前頁面的 IP 地址。$_SERVER
是 PHP 中的超級全域性變數,它使用各種陣列元素作為引數。我們使用 REMOTE_ADDR
作為 $_SERVER
變數中的陣列元素來訪問客戶端的實際 IP 地址。注意,$_SERVER['REMOTE_ADDR']
並不總是在所有情況下都提供正確的客戶端 IP 地址。我們將在下面討論其他情況。確保伺服器 API(SAPI)的配置正確,以便上面的表示式將返回連線的真實 IP。
在下面的示例中,localhost
用作伺服器。因此,它返回回送 IP 地址。要了解回送地址,請參考 here。假設以下 PHP 指令碼的 URL 是 http://localhost/index.php
。它將本地計算機的 IP 地址輸出為::1
。::1
是 localhost
的 IPv6 表示形式。
例如,將 $_SERVER['REMOTE_ADDR']
分配給變數 ip_addr
。然後,使用 echo
列印變數。
示例程式碼:
# php 7.x
<?php
$ip_add = $_SERVER['REMOTE_ADDR'];
echo "The user's IP address is - ".$ip_add;
?>
輸出:
The user's IP address is - ::1
使用 $_SERVER['REMOTE_ADDR']
、$_SERVER['HTTP_CLIENT_IP']
和 $_SERVER['HTTP_X_FORWARDED_FOR']
查詢使用者的 IP 地址
我們可以使用超全域性變數 $_SERVER
的陣列元素,例如 $_SERVER['REMOTE_ADDR']
,$_SERVER['HTTP_CLIENT_IP']
和 $_SERVER['HTTP_X_FORWARDED_FOR']
來查詢 IP 地址 PHP 中的使用者。使用 $_SERVER['REMOTE_ADDR']
查詢使用者的真實 IP 地址。當使用者從共享 Internet 訪問頁面時,使用 $_SERVER['HTTP_CLIENT_IP']
查詢 IP 地址。當使用者使用代理訪問網頁時,使用 $_SERVER['HTTP_X_FORWARDED_FOR']
查詢 IP 地址。請注意,諸如 HTTP_X_FORWARDED_FOR
和 HTTP_CLIENT_IP
之類的標頭可能是偽造的,因為任何人都可以設定。有時,它們可能不代表客戶端的真實 IP 地址。
例如,使用 empty()
函式檢查 $_SERVER['HTTP_CLIENT_IP']
是否包含某些內容。如果包含,則在 $ip
變數中分配 vale 並列印 i。
再次,相應地檢查 $_SERVER['HTTP_X_FORWARDED_FOR']
,並分配該值並列印(如果存在)。在 $_SERVER['REMOTE_ADDR']
上執行類似的操作。
下例 $_SERVER['REMOTE_ADDR']
返回 IP 地址,因為使用者未使用任何代理或共享的 Internet 連線。檢視 PHP 手冊,以瞭解有關 $_SERVER
陣列的更多資訊。
示例程式碼:
#php 7.x
<?php if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
echo $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
echo $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
echo $ip = $_SERVER['REMOTE_ADDR'];
}
?>
輸出:
::1
使用三元運算子和 isset()
函式查詢使用者的 IP 地址
我們可以使用簡寫方法使用三元運算子在 PHP 中查詢使用者的 IP 地址。在此方法中,isset()
方法檢查陣列是否包含指定的元素或標頭檔案。
例如,使用 isset()
函式檢查陣列是否包含 HTTP_CLIENT_IP
。如果條件為真,則設定 HTTP_CLIENT_IP
。然後,如果條件失敗,則使用 isset()
函式檢查陣列是否包含 HTTP_X_FORWARDED_FOR
。同樣,如果條件為真,則設定 HTTP_X_FORWARDED_FOR
,並在條件失敗時設定 REMOTE_ADDR
。
在下面的示例中,客戶端未使用代理或共享 Internet。因此,將執行 $_SERVER['REMOTE_ADDR']
。請檢視 MSDN Web 文件以瞭解有關三元運算子。
示例程式碼:
#php 7.x
<?php
$ip = isset($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
echo "The user IP Address is - ". $ip;
?>
輸出:
The user IP Address is - ::1
Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.
LinkedIn