若是你僅僅須要獲取用戶訪問的IP地址,那麼直接使用系統內置的get_client_ip函數便可,該函數是ThinkPHP標準模式內置方法,能夠直接使用,比PHP內置的系統變量$_SERVER['HTTP_CLIENT_IP']具備更好的兼容性,用法:php
$ip = get_client_ip();
thinkphp
例如:$ip = get_client_ip(1);
數組
返回的結果可能相似於:2130706433,可用於地址範圍和比較。
服務器
僅僅獲取IP地址並不能徹底知足應用的需求,只能記錄下來用於往後的日誌分析須要,IP地址定位功能能夠讓你獲取 用戶的所在區域。要使用IP定位功能,除了須要IpLocation擴展類庫以外,還須要IP地址庫文件,因爲ThinkPHP默認採用UTF8編碼,因 此最好是UTF8格式的IP地址庫文件,若是是純真gbk編碼的IP地址庫文件,則須要對獲取結果進行編碼轉換.
使用方法:函數
import('ORG.Net.IpLocation');// 導入IpLocation類
編碼
$Ip = new IpLocation(); // 實例化類
spa
$location = $Ip->getlocation('218.79.93.194'); // 獲取某個IP地址所在的位置
日誌
$location['ip'] // IP地址code
$location['beginip'] // 用戶IP所在範圍的開始地址ip
$location['endip'] // 用戶IP所在範圍的結束地址
$location['country'] // 所在國家或者地區
$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地址
import('ORG.Net.IpLocation');// 導入IpLocation類
$Ip = new IpLocation(); // 實例化類
$area = $Ip->getlocation('www.thinkphp.cn'); // 獲取域名服務器所在的位置