Thinkphp的Ip地址定位

獲取IP地址

若是你僅僅須要獲取用戶訪問的IP地址,那麼直接使用系統內置的get_client_ip函數便可,該函數是ThinkPHP標準模式內置方法,能夠直接使用,比PHP內置的系統變量$_SERVER['HTTP_CLIENT_IP']具備更好的兼容性,用法:php

$ip = get_client_ip();thinkphp

get_client_ip()支持IP地址的多種狀況檢測和合法性驗證,返回值就是獲取到的IP地址,若是獲取到的IP地址非法,將返回0.0.0.0。
若是須要,也能夠返回IPV4地址數字:

例如:$ip = get_client_ip(1);
數組

返回的結果可能相似於:2130706433,可用於地址範圍和比較。
服務器

IP地址定位

僅僅獲取IP地址並不能徹底知足應用的需求,只能記錄下來用於往後的日誌分析須要,IP地址定位功能能夠讓你獲取 用戶的所在區域。要使用IP定位功能,除了須要IpLocation擴展類庫以外,還須要IP地址庫文件,因爲ThinkPHP默認採用UTF8編碼,因 此最好是UTF8格式的IP地址庫文件,若是是純真gbk編碼的IP地址庫文件,則須要對獲取結果進行編碼轉換.
使用方法:函數

  1. import('ORG.Net.IpLocation');// 導入IpLocation類編碼

  2. $Ip = new IpLocation(); // 實例化類spa

  3. $location = $Ip->getlocation('218.79.93.194'); // 獲取某個IP地址所在的位置日誌

  返回的location變量是一個數組,包括:
  1. $location['ip'] // IP地址code

  2. $location['beginip'] // 用戶IP所在範圍的開始地址ip

  3. $location['endip'] // 用戶IP所在範圍的結束地址

  4. $location['country'] // 所在國家或者地區

  5. $location['area'] // 所在區域

一般,咱們要獲取IP定位的話,只須要取country和area信息:

$info =  $location['country'].$location['area'];

若是你使用的IP地址庫文件不是UTFWry.dat的話,咱們須要在實例化IpLocation類的時候傳入地址庫文件名,例如: $Ip = new IpLocation('MyIpWry.dat'); // 傳入IP地址庫文件名

若是你的IP地址庫是GBK編碼的話,須要對返回結果進行編碼轉換。例如:

$info = iconv('gbk','utf-8',$location['country'].$location['area']);

若是調用getlocation方法的時候沒有傳入任何參數,系統會自動調用上面的get_client_ip函數獲取當前所在IP地址:

$location = $Ip->getlocation(); 

也能夠支持傳入域名來自動獲取ip地址
  1. import('ORG.Net.IpLocation');// 導入IpLocation類

  2. $Ip = new IpLocation(); // 實例化類

  3. $area = $Ip->getlocation('www.thinkphp.cn'); // 獲取域名服務器所在的位置

相關文章
相關標籤/搜索