根据用户IP获取其所在地

预定义变量$_SERVER的用法中,我们可以发现参数 ‘REMOTE_ADDR‘的作用是:浏览当前页面的用户的 IP 地址。

根据这个我们可以获取客户端的IP,根据获取的IP我们又可以进一步获取对方的所在地等其他信息。

这一节主要是了解一下如何获取客户端的IP地址,并定位其所在地。我们先看看代码实现:

<?php
header('Content-Type:text/html;Charset=utf-8');
function GetIp(){
    $realip = '';
    $unknown = 'unknown';
    if (isset($_SERVER)){
        if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown)){
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            foreach($arr as $ip){
                $ip = trim($ip);
                if ($ip != 'unknown'){
                    $realip = $ip;
                    break;
                }
            }
        }else if(isset($_SERVER['HTTP_CLIENT_IP']) && !empty($_SERVER['HTTP_CLIENT_IP']) && strcasecmp($_SERVER['HTTP_CLIENT_IP'], $unknown)){
            $realip = $_SERVER['HTTP_CLIENT_IP'];
        }else if(isset($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown)){
            $realip = $_SERVER['REMOTE_ADDR'];
        }else{
            $realip = $unknown;
        }
    }else{
        if(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), $unknown)){
            $realip = getenv("HTTP_X_FORWARDED_FOR");
        }else if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), $unknown)){
            $realip = getenv("HTTP_CLIENT_IP");
        }else if(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), $unknown)){
            $realip = getenv("REMOTE_ADDR");
        }else{
            $realip = $unknown;
        }
    }
    $realip = preg_match("/[\d\.]{7,15}/", $realip, $matches) ? $matches[0] : $unknown;
    return $realip;
}

function GetIpLookup($ip = ''){
    if(empty($ip)){
        $ip = GetIp();
    }
    $address = @file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=' . $ip);
    if(empty($address)){ return false; }
    $jsonMatches = array();
    preg_match('#\{.+?\}#', $address, $jsonMatches);
    if(!isset($jsonMatches[0])){ return false; }
    $address_json = json_decode($jsonMatches[0], true);
    if(isset($address_json['ret']) && $address_json['ret'] == 1){
        $address_json['ip'] = $ip;
        unset($address_json['ret']);
    }else{
        return false;
    }
    return $address_json;
}

$ipInfos = GetIpLookup();
var_dump($ipInfos);
echo "<br>";
echo "你的地址: " .$ipInfos ["country"].$ipInfos ["province"].$ipInfos ["city"]. "<br>";

将代码部署到SAE,运行结果如下:

从运行结果中可以看到 $address_json 中包含的内容是:

array(10) { ["start"]=> int(-1) ["end"]=> int(-1) ["country"]=> string(6) "中国" ["province"]=> string(6) "四川" ["city"]=> string(6) "成都" ["district"]=> string(0) "" ["isp"]=> string(0) "" ["type"]=> string(0) "" ["desc"]=> string(0) "" ["ip"]=> string(13) "121.48.152.31"
}

我们只要从其中提取出需要的信息显示出来即可。

本次获取用户所在地使用了新浪提供的API,也可以根据实际情况采用其他API来实现。根据IP还能获取所在地天气,交通等各种信息,有兴趣大家可以再一起讨论了。

时间: 2024-08-05 09:21:19

根据用户IP获取其所在地的相关文章

通过IP获取相应所在地的地址

曾几何时通过IP获取相应所在地的地址一直是一个梦想,曾经为止努力过,但效果并不是很好,现在将努力的成果(某些来源于网络)粘贴出来,希望对某些人有所启发,倘若有人有新的见解,还望不惜赐教: 1.借助外网实现获取IP相应所在地地址的目的: import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URL

百度接口通过ip获取用户所在地

/** * 百度接口 * 通过用户ip获取用户所在地 * @param userIp * @return */ public static String getAddressByBD2(String strIP) { try { URL url = new URL("http://opendata.baidu.com/api.php?query=" + strIP+"&co=&resource_id=6006&t=1433920989928&i

PHP 根据IP获取地理位置

1 /** 2 * 根据用户IP获取用户地理位置 3 * $ip 用户ip 4 */ 5 function get_position($ip){ 6 if(empty($ip)){ 7 return '缺少用户ip'; 8 } 9 $url = 'http://ip.taobao.com/service/getIpInfo.php?ip='.$ip; 10 $ipContent = file_get_contents($url); 11 $ipContent = json_decode($ipC

获取用户Ip地址通用方法

这个来自一些项目中,获取用户Ip,进行用户操作行为的记录,是常见并且经常使用的. 一般朋友,都会看到如下通用获取IP地址方法. 1 public static function getIp() 2 { 3 if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) 4 { 5 $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]; 6 } 7 elseif ($HTTP_SERVER_VAR

Flask框架获取用户IP地址的方法

本文实例讲述了python使用Flask框架获取用户IP地址的方法.分享给大家供大家参考.具体如下: 下面的代码包含了html页面和python代码,非常详细,如果你正使用Flask,也可以学习一下最基本的Flask使用方法. python代码如下: from flask import Flask, render_template, request # Initialize the Flask application app = Flask(__name__) # Default route,

MD5加密&获取用户IP、ID、系统时间

1.通常我们在数据库中保存用户信息的时候需要把密码和一些其他重要信息,用加密的方式保存,这就会用到下面的MD5加密程序段 MessageDigest md=MessageDigest.getInstance("MD5"); md.update("被加密的字符串".getBytes()); String md5sString =new BigInteger(1,md.digest()).toString(16); 2.获取用户IP,ID,系统时间语句 String u

【用jQuery来判断浏览器的类型】及【javascript获取用户ip地址】

用jQuery来判断浏览器的类型,主要是使用$.browser这个工具类,使用方法: $.browser.['浏览器关键字'] //谷歌浏览器.360浏览器等其他一些浏览器,没有专门的判断 function appInfo() { var bro = $.browser; var binfo = ""; if (bro.msie) { binfo = "Microsoft Internet Explorer " + bro.version; // bro.versi

php利用淘宝IP库获取用户ip地理位置

利用淘宝IP库获取用户ip地理位置 我们查ip的时候都是利用ip138查询的,不过那个有时候是不准确的,还不如自己引用淘宝的ip库来查询,这样准确度还高一些.不多说了,介绍一下: 淘宝IP地址库 淘宝公布了他们的IP库http://ip.taobao.com/,还有REST API接口,不过每个用户的访问频率需小于10qps,访问方    式:http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串],返回内容以json格式的.具有IP查询,IP

根据ip获取用户地理位置

各大网站都提供根据ip获取用户地理位置信息,这里以新浪的接口为例子 接口地址为:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=218.18.171.146 代码: 1 #region 根据ip获取地点 2 /// 获取Ip归属地 3 /// </summary> 4 /// <param name="ip">ip</param> 5 /// <return