欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP如何獲取訪問(wèn)者的IP地址和歸屬地方式詳解

 更新時(shí)間:2023年10月26日 09:50:28   作者:文煞  
在用PHP開(kāi)發(fā)程序的時(shí)候,很多時(shí)候我們需要獲取訪問(wèn)者的一些關(guān)鍵信息,比如訪問(wèn)者的IP地址或者訪問(wèn)者來(lái)自哪里(IP歸屬地),也便于我們對(duì)網(wǎng)站進(jìn)行一些內(nèi)容的限制或者功能的補(bǔ)充完善等等,本文就來(lái)教大家用PHP如何獲取訪問(wèn)者的IP地址和歸屬地

一、什么是IP地址

IP地址是互聯(lián)網(wǎng)協(xié)議(IP協(xié)議)定義的一種用于標(biāo)識(shí)網(wǎng)絡(luò)上主機(jī)(計(jì)算機(jī)或其他設(shè)備)的地址。它是一個(gè)由四個(gè)數(shù)字組成的標(biāo)識(shí)符,每個(gè)數(shù)字范圍是0到255,以點(diǎn)分隔開(kāi)。IP地址用于在互聯(lián)網(wǎng)上進(jìn)行通信和傳輸數(shù)據(jù),類似于人類使用的郵政地址。它可以用來(lái)確定一個(gè)設(shè)備在網(wǎng)絡(luò)中的位置,以便其他設(shè)備能夠準(zhǔn)確地發(fā)送數(shù)據(jù)到該設(shè)備。  IP地址分為IPv4和IPv6兩個(gè)版本。IPv4是目前廣泛使用的版本,采用32位地址格式。而IPv6是較新的版本,采用128位地址格式,為了應(yīng)對(duì)互聯(lián)網(wǎng)用戶數(shù)量的增長(zhǎng)而設(shè)計(jì)。

我們常用的IP4地址如:8.8.8.8,114.114.114.114(等類似由4組數(shù)字組成的網(wǎng)絡(luò)地址)。本地IP地址如:192.168.0.1,127.0.0.1等。

二、PHP如何獲取IP地址

PHP直接獲取訪問(wèn)者IP地址:

$ip=$_SERVER["REMOTE_ADDR"];//訪問(wèn)者IP

這里我們可以通過(guò)系統(tǒng)變量$_SERVER["REMOTE_ADDR"]取得訪問(wèn)者的IP地址并存入自定義變量$ip。方便后續(xù)代碼引用。當(dāng)然這里是通過(guò)PHP直接獲取用戶的IP地址,如果用戶使用了代理服務(wù)器,這該IP地址就是代理服務(wù)器的IP地址,而非用戶的真實(shí)IP地址。

如果需要獲取用戶的真實(shí)IP地址,可以嘗試使用$_SERVER['HTTP_X_FORWARDED_FOR']。但是,這個(gè)值不是所有的代理服務(wù)器都會(huì)設(shè)置,所以結(jié)果可能為空或者不準(zhǔn)確。如果需要準(zhǔn)確獲取用戶的真實(shí)IP地址,可以使用一些第三方的庫(kù)或服務(wù)。

三、獲取IP地址的歸屬地

我們無(wú)法通過(guò)PHP直接獲得IP地址的歸屬地,但是我們可以利用本地IP庫(kù)(離線下載)或者在線IP庫(kù)對(duì)IP地址進(jìn)行匹配。如果該IP地址在IP庫(kù)或者該IP特征進(jìn)行匹配即可獲得歸屬地。

1、百度在線API接查詢

$ip=$_SERVER["REMOTE_ADDR"];
$ak='**********';//這里需要你自己申請(qǐng)并獲取$ipurl='https://api.map.baidu.com/location/ip?ak='.$ak.'&ip='.$ip; //GET請(qǐng)求
$fh= file_get_contents("$ipurl");
$jsonarr = json_decode($fh, true);
if($jsonarr['status'] == 0)
{
$result = $jsonarr['content'];
$result = $result['address_detail'];
$froms='中國(guó)-'.$result['province'].'-'.$result['city'];
}else{
echo "未能查詢到".$ip."的歸屬地";
} 

這里是通過(guò)百度api的IP查詢接口進(jìn)行查詢的。網(wǎng)絡(luò)很多代碼通過(guò)淘寶IP庫(kù)查詢,但是我發(fā)現(xiàn)淘寶IP庫(kù)的api接口好像關(guān)閉了,不能正常使用了。

2、通過(guò)其他api接口查詢

$token = '*******'; // 用戶token ,登錄系統(tǒng)后可獲取到
$fh= file_get_contents("https://67ip.cn/check?ip=$ip&token=$token");
$jsonarr = json_decode($fh, true);;
if($jsonarr['code']=='200'){
$result = $jsonarr['data'];
if($result['city']=='0'){
$result['city']='未知';
}
if($result['service']=='0'){
$result['service']='';
}
$froms=$result['country'].'-'.$result['city'].'-'.$result['service'];    
}else{
$froms='火星';
}

本文介紹的都是通過(guò)api接口進(jìn)行查詢,為什么不介紹本地IP庫(kù)進(jìn)行查詢呢?主要是本人沒(méi)有獲取到本地IP庫(kù)的數(shù)據(jù)文件,不知道本地IP庫(kù)的格式,無(wú)法完成有效的對(duì)應(yīng)的代碼,如果誰(shuí)有本地IP庫(kù)可以分享我一份,謝謝。不過(guò)我們可以舉個(gè)例子來(lái)完成。

3、本地IP庫(kù)獲取歸屬地

假設(shè)我本地IP庫(kù)的地址數(shù)據(jù)內(nèi)容如下

文件名稱:ip.txt
192.168.0.1:路由器
192.168.0.2:老婆的電腦
192.168.0.3:兒子的ipad
192.168.0.4:老媽的手機(jī)
192.168.0.5:老爹的手機(jī)
118.118.118.188:本人的辦公電腦
...

我們可以通過(guò)IP匹配的方法獲得訪問(wèn)者信息:

$visitorIp = $_SERVER['REMOTE_ADDR'];
$ipDataFile = 'ip.txt';
// 讀取ip.txt文件中的數(shù)據(jù)
$ipData = file_get_contents($ipDataFile);
// 按行拆分?jǐn)?shù)據(jù)
$ipRecords = explode("\n", $ipData);
// 遍歷IP記錄,查找匹配的訪問(wèn)者信息
foreach ($ipRecords as $record) {
    $parts = explode(":", $record);
    $ip = trim($parts[0]);
    $info = trim($parts[1]);
    // 匹配IP地址
    if ($visitorIp === $ip) {
        echo "訪問(wèn)者IP:".$visitorIp."<br>";
        echo "訪問(wèn)者信息:".$info;
        break;
    }
}

以上就是PHP如何獲取訪問(wèn)者的IP地址和歸屬地方式詳解的詳細(xì)內(nèi)容,更多關(guān)于PHP獲取IP地址歸屬地的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論