thinkphp獲取ip地址及位置信息


ThinkPHP\Common\funcitons.php下有一個get_client_ip()能夠獲取ip地址

但是有時候不夠准確

找到了下面一段來

    function get_client_ip($type = 0) {
        $type       =  $type ? 1 : 0;
        static $ip  =   NULL;
        if ($ip !== NULL) return $ip[$type];
        if($_SERVER['HTTP_X_REAL_IP']){//nginx 代理模式下,獲取客戶端真實IP
            $ip=$_SERVER['HTTP_X_REAL_IP'];     
        }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {//客戶端的ip
            $ip     =   $_SERVER['HTTP_CLIENT_IP'];
        }elseif (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['REMOTE_ADDR'])) {
            $ip     =   $_SERVER['REMOTE_ADDR'];//瀏覽當前頁面的用戶計算機的ip地址
        }else{
            $ip=$_SERVER['REMOTE_ADDR'];
        }
        // IP地址合法驗證
        $long = sprintf("%u",ip2long($ip));
        $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
        return $ip[$type];
    }

 現在我們就能用了

$ip=get_client_ip();

 現在我們要根據ip地址獲取用戶的位置

Thinkphp支持IP定位功能,需要使用擴展類庫Org\Net\IpLocation,並且要配合IP地址庫文件一起使用

$Ip = new \Org\Net\IpLocation('UTFWry.dat'); // 實例化類 參數表示IP地址庫文件
$area = $Ip->getlocation(); // 獲取某個IP地址所在的位置

 這個UTFWry.dat需要我們下載

http://pan.baidu.com/s/1eSz1GTO 密碼: 7q4v,解壓后放到ThinkPHP\Library\Org\Net目錄下

現在我把$area信息輸出下

array (size=5)
  'ip' => string '172.xxx.1.228' (length=12)
  'beginip' => string '172.xxx.0.0' (length=10)
  'endip' => string '172.xxx.255.255' (length=14)
  'country' => string '局域網' (length=9)
  'area' => string '對方和您在同一內部網' (length=30)

 因為手機連的電腦wifi。。。。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM