ThinkPHP獲取ip地址,或者數字地址和ip地理位置的查詢

1.TP 中獲取客戶端IP地址的系統公共函數是:function get_client_ip()。返回值就是IP地址或者數字地址

看下源碼:

function get_client_ip($type = 0,$adv=false) {
    $type       =  $type ? 1 : 0;
    static $ip  =   NULL;
    if ($ip !== NULL) return $ip[$type];
    if($adv){
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            $pos    =   array_search('unknown',$arr);
            if(false !== $pos) unset($arr[$pos]);
            $ip     =   trim($arr[0]);
        }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
            $ip     =   $_SERVER['HTTP_CLIENT_IP'];
        }elseif (isset($_SERVER['REMOTE_ADDR'])) {
            $ip     =   $_SERVER['REMOTE_ADDR'];
        }
    }elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ip     =   $_SERVER['REMOTE_ADDR'];
    }
    // IP地址合法驗證
    $long = sprintf("%u",ip2long($ip));
    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
    return $ip[$type];
}

get_client_ip(0)返回ip    get_client_ip(1)返回ipv4的數字地址


2.查詢ip的地理位置,這裏要下載ip庫(UTFWry.dat),地址:http://www.thinkphp.cn/extend/270.html

並把下載好的dat文件放入和IpLocation.class.php同級目錄中


在Controller中寫如下代碼:

use Org\Net\IpLocation;
//把IpLocation導入
$ip=new Iplocation();//新建一個IP查詢對象
$location=$ip->getlocation();
var_dump($location);
這裏不貼getlocation()的源碼了,太長了,有興趣的人可以自己去看哦

最終結果下:


$location['ip'] // IP地址
$location['beginip'] // 用戶IP所在範圍的開始地址
$location['endip'] // 用戶IP所在範圍的結束地址
$location['country'] // 所在國家或者地區
$location['area'] // 所在區域


getlocation()還可以獲取指定域名的地理位置信息

$ip=new IpLocation();
$location=$ip->getlocation('baidu.com');//獲取百度的
var_dump($location);


當然直接傳ip也是可以的,就不舉例

如果你使用的IP地址庫文件不是UTFWry.dat(注意在Linux下面文件名的大小寫也需要一致)的話,我們需要在實例化IpLocation類的時候傳入地址庫文件名,例如:

代碼如下:
$Ip = new IpLocation('MyIpWry.dat'); // 傳入IP地址庫文件名

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

代碼如下:
$info = iconv('gbk','utf-8',$location['country'].$location['area']);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章