首頁  >  文章  >  後端開發  >  PHP實作IP位址查詢功能

PHP實作IP位址查詢功能

王林
王林原創
2023-06-22 23:22:354099瀏覽

隨著網路的快速發展,IP位址成為了網路通訊中不可或缺的一環。在進行網路安全監測、流量管理、電商廣告定向投放等方面,IP位址的資訊非常重要。因此,為了方便用戶查詢IP位址/網域信息,許多網站提供了IP位址查詢功能。本篇文章將介紹如何用PHP實作IP位址查詢功能,供讀者參考。

一、何為IP位址?

IP位址(Internet Protocol Address)即網路協定位址,是網際網路協定(Internet Protocol)的位址。網路中的每個設備都需要一個IP位址,以便進行通訊。 IP位址由32位元二進位數字組成,通常分為四個位元組,每個位元組的範圍為0-255。例如,「192.168.0.1」就是一個IP位址。

二、取得IP位址

在PHP中,取得IP位址有多種方法,常用的有以下幾種:

  1. $_SERVER['REMOTE_ADDR ']:取得存取客戶端的IP位址。
  2. $_SERVER['HTTP_X_FORWARDED_FOR']:取得代理伺服器轉送的客戶端IP位址。如果使用代理伺服器進行訪問,則客戶端真實的IP位址可能被代理伺服器偽造。
  3. $_SERVER['HTTP_CLIENT_IP']:取得客戶端IP位址。與HTTP_X_FORWARDED_FOR類似,也需要防止被偽造。

以上三種方法取得IP位址的可靠性因環境不同,因此需要根據實際情況選擇合適的方法。

例如,以下的程式碼透過偵測HTTP_X_FORWARDED_FOR和HTTP_CLIENT_IP是否存在,來取得目前存取IP的資訊。

function getIP(){
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    }else{
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

由於IP位址的格式不一,為了方便處理,可以將其轉換為數字格式。下面的程式碼將IP位址轉換為32位元無符號整形:

function ip2long(string $ip): int {
    return sprintf("%u", ip2long($ip));
}

三、IP位址查詢

在IP位址查詢過程中,需要存取外部API以獲得我們需要的資料。本文以淘寶API為例,介紹如何使用PHP取得IP位址的資訊。

首先,註冊淘寶開放平台帳號並申請API接口,然後取得API存取位址和AppKey。

接下來,我們可以使用下面的程式碼實現透過API取得IP位址的位置資訊和營運商資訊。

function getIpInfo($ip, $appkey){
    $url = 'http://ip.taobao.com/service/getIpInfo.php?ip='.trim($ip).'&soft='.$appkey;
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    $output = curl_exec($ch);
    curl_close($ch);
    $data = json_decode($output,true);
    return $data;
}

以上程式碼先拼接API介面位址與參數,然後使用CURL庫發起HTTP請求,最後回傳JSON格式資料。呼叫該函數即可取得IP資訊。

四、完整程式碼實作

以下是完整的PHP程式碼實作:

function getIP(){
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    }else{
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

function ip2long(string $ip): int {
    return sprintf("%u", ip2long($ip));
}

function getIpInfo($ip, $appkey){
    $url = 'http://ip.taobao.com/service/getIpInfo.php?ip='.trim($ip).'&soft='.$appkey;
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    $output = curl_exec($ch);
    curl_close($ch);
    $data = json_decode($output,true);
    return $data;
}

$ip = getIP();
$appkey = 'YOUR_APPKEY'; //替换为自己的AppKey
$info = getIpInfo($ip, $appkey);
print_r($info);

以上程式碼實作了取得存取IP位址、轉換IP位址為數字格式、查詢IP地址資訊等功能。讀者可以將其應用在自己的網站上,並進行相應的二次開發。

總之,IP位址查詢功能在網路應用上具有廣泛的應用價值。透過PHP編寫實現此功能可以讓查詢更加便捷快速。需要注意的是,使用第三方API時,需要遵循相關法律規定和資料安全保障措施,避免資訊被濫用。

以上是PHP實作IP位址查詢功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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