首頁  >  文章  >  後端開發  >  在 PHP 中取得 IP 位址

在 PHP 中取得 IP 位址

PHPz
PHPz原創
2024-08-29 13:07:16682瀏覽

要學習“在 PHP 中取得 IP 位址”,首先我們將研究 IP 位址。 IP 位址或網際網路通訊協定位址是連接到網路的每個系統或裝置都具有的數位位址或標籤的位址。 IP 位址被指派給每個此類裝置。這些設備使用網際網路協定進行任何類型的通訊。

廣告 該類別中的熱門課程 PHP 開發人員 - 專業化 | 8 門課程系列 | 3次模擬測驗

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

IP版本

以下幾點解釋IP版本:

  • IP版本是根據網際網路協定標籤的位元來定義的。例如,早期版本的IPv4定義了32位元數字的網際網路協定位址。隨著網路的發展,IPv6應運而生,它定義了128位元數字的IP標籤。 IPv6 從 1995 年開始使用至今。網際網路協定位址是用人類可以理解的語言編寫的。 IPv4 的範例如下:170.17.260.2,IPv6 的範例為 2001:db8:2:1434:1:587:5:2。
  • 網際網路協定位址取得的空間是全域管理的。稱為互聯網號碼分配機構的註冊機構以及其他五個區域註冊機構使互聯網協定位址的空間管理成為可能。 IANA 負責向其指定區域或領土內的所有最終用戶和其他網際網路供應商分配和管理網際網路協定位址空間。同樣,連接到網際網路服務供應商網路的所有裝置都被指派一個唯一的網際網路通訊協定位址。
  • 有不經常更改的靜態網際網路通訊協定位址,它們被提供給伺服器。網際網路服務供應商為使用數據機的機器提供特定且唯一的網際網路協定位址。該 IP 位址對於一次會話來說是唯一的,並且可能會在下一次會話中發生變化。

在 PHP 中辨識並傳回 IP 位址

出於安全原因,網站收集其網站訪客的 IP 位址。有一個簡單的方法可以在 PHP 中取得該位址。 PHP 中有一個特定的陣列可以幫助並傳回您機器的 IP 位址。數組稱為“$_SERVER”。它包含有關路徑、標頭和腳本位置的資訊。 Web 伺服器建立 $_SERVER 陣列所需的資訊。有時,伺服器不會建立或提供陣列所需的所有信息,它們可能會省略其中一些資訊。因此,在這種情況下可以使用另一個陣列。它被寫為“SERVER_ADDR”。此陣列傳回執行腳本的伺服器的 IP 位址。

在 PHP 中取得 IP 位址的方法

以下是在 php 中取得 IP 位址的範例:

範例#1

最簡單的方法是使用 $_SERVER 和 ‘REMOTE_ADDR’,它將傳回目前正在查看該頁面的使用者的 IP 位址。

  • 在 PHP 中使用 [‘REMOTE_ADDR’] 來辨識伺服器 IP 位址的範例。

代碼:

<?php
echo 'User IP - '.$_SERVER['REMOTE_ADDR'];
?>

輸出:

在 PHP 中取得 IP 位址

範例#2

另一種方法,稱為“SERVER_ADDR”,也用於檢索伺服器的 IP 位址。  

  • 在 PHP 中使用 [‘SERVER_ADDR’] 來辨識伺服器 IP 位址的範例。

代碼:

<?php
// PHP program to retrieve server’s Internet Protocol address
// Creating a variable to store the server address
$ip_server = $_SERVER['SERVER_ADDR'];
// Displaying the retrieved address
echo "Server IP Address is: $ip_server";
?>

輸出:

在 PHP 中取得 IP 位址

對上述程式的說明:上面的範例陣列 [$_SERVER] 很有幫助,因為機器未透過代理連接。如果機器透過代理伺服器連接到互聯網,PHP 中的 $_SERVER[‘REMOTE_ADDR’] 不會回傳正確的 IP 位址。它只會傳回代理伺服器和使用者或客戶端電腦的 IP 位址。在這種情況下,可以使用另一種方​​法來檢索正確的位址。

範例 #3

以下範例用於傳回正確且真實的 IP 位址,即使電腦隱藏在代理伺服器後面。它使用一對額外的 SERVER 變量,可用來取得客戶端系統或電腦的確切 IP 位址。它們被稱為 HTTP_CLIENT_IP 和 HTTP_X_FORWARDED_FOR。

  • 使用 [‘HTTP_CLIENT_IP’] 和 [‘HTTP_X_FORWARDED_FOR’] 在 PHP 中辨識伺服器 IP 位址的範例。

代碼:

<?php
function RetrieveUserIP()
{
if(!empty($_SERVER['HTTP_CLIENT_IP']))
{
$address=$_SERVER['HTTP_CLIENT_IP'];
}
elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$address=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$address=$_SERVER['REMOTE_ADDR'];
}
return $address;
}
echo 'User IP Address is'.RetrieveUserIP();
?>

輸出:

在 PHP 中取得 IP 位址

如果想了解上述程式碼的動作流程,可以參考下面的流程圖。

在 PHP 中取得 IP 位址

上述程式的說明:上面檢索 IP 位址的範例使用兩個變量,[‘HTTP_CLIENT_IP’] 和 [‘HTTP_X_FORWARDED_FOR’]。在程式中,我們第一次嘗試使用 HTTP_CLIENT_IP 直接將其從機器上取得。如果不可用,我們會嘗試使用 HTTP_X_FORWARDD_FOR 來「轉送」IP。當兩個條件都為空時,我們嘗試使用 REMOTE_ADDR 變數來取得 IP 位址。

需要記住的重點

在 php 中取得 IP 位址需要記住以下幾點:

1.當我們執行上面的程式碼時,回傳的IP位址顯示為::1。這稱為環回位址,實際上表示為 127 個零,後面跟著一個 1,即(0000….127 次….1)。如果我們要寫下來的話,就會寫成:

在 PHP 中取得 IP 位址

2.但在 IPv6 中,我們可以用簡短的形式來表示這個大標籤。因此,如果單一區塊中全為零,則可以用單一零替換。因此,當遵循上述規則時,它會變成:0:0:0:0:0:0:0:0001;

在 PHP 中取得 IP 位址

3.一樣,零可以消除,我們留下:: 0001

在 PHP 中取得 IP 位址

4.再減少為‘:: 1’,因此輸出。

上述程式碼的說明: 如果讓它們運行,它們可能不會給出任何輸出,或者可能返回運行時錯誤,因為私有域不提供其互聯網協定位址。而如果上面的程式碼在本地伺服器或本地主機上執行,例如我們使用了WAMP伺服器,它會根據IP版本提供輸出,也就是說,如果是IPv4,則Internet協定位址將為顯示為'127:0: 0:1' 而如果是IPv6,則網際網路通訊協定位址將顯示如上,即':: 1'

以上是在 PHP 中取得 IP 位址的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:PHP 輸出緩衝下一篇:PHP 輸出緩衝