悠闲博客-blog.yxrjt.cn

php获取客户端IP并分析IP归属地实例代码

更新时间:2025-10-14 10:21点击:64

<?php


function getClientIp() {
    $ip = 'unknow';
    foreach (array(
                'HTTP_CLIENT_IP',
                'HTTP_X_FORWARDED_FOR',
                'HTTP_X_FORWARDED',
                'HTTP_X_CLUSTER_CLIENT_IP',
                'HTTP_FORWARDED_FOR',
                'HTTP_FORWARDED',
                'REMOTE_ADDR') as $key) {
        if (array_key_exists($key, $_SERVER)) {
            foreach (explode(',', $_SERVER[$key]) as $ip) {
                $ip = trim($ip);
                //会过滤掉保留地址和私有地址段的IP,例如 127.0.0.1会被过滤
                //也可以修改成正则验证IP
                if ((bool) filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
                    return $ip;
                }
            }
        }
    }
    return $ip;
}

//echo getClientIp()."<br>";
$ip = getClientIp();

function get_ip_city($ip)
{
    $ch = curl_init();
    $url = 'https://whois.pconline.com.cn/ipJson.jsp?ip=' . $ip;
    //用curl发送接收数据
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    //请求为https
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $location = curl_exec(handle: $ch);
    curl_close($ch);
    //转码
    $location = mb_convert_encoding($location, 'utf-8', 'GB2312');
    //var_dump($location);
    //截取{}中的字符串
    $location = substr($location, strlen('({') + strpos($location, '({'), (strlen($location) - strpos($location, '})')) * (-1));
    //将截取的字符串$location中的‘,’替换成‘&’   将字符串中的‘:‘替换成‘=’
    $location = str_replace('"', "", str_replace(":", "=", str_replace(",", "&", $location)));
    //php内置函数,将处理成类似于url参数的格式的字符串  转换成数组
    parse_str($location, $ip_location);
    // return $ip_location['addr']; # 返回字符串
    return $ip_location; # 返回数组
}
echo "<pre>";
var_dump(get_ip_city("$ip"));
?>
输出结果:
array(10) {
  ["ip"]=>
  string(11) "218.76.27.3"
  ["pro"]=>
  string(9) "湖南省"
  ["proCode"]=>
  string(6) "430000"
  ["city"]=>
  string(9) "长沙市"
  ["cityCode"]=>
  string(6) "430100"
  ["region"]=>
  string(0) ""
  ["regionCode"]=>
  string(1) "0"
  ["addr"]=>
  string(25) "湖南省长沙市 电信"
  ["regionNames"]=>
  string(0) ""
  ["err"]=>
  string(0) ""
}

栏目分类

联系方式
  • help@yxrjt.cn
  • lgc@yxrjt.cn
  • admin@yxrjt.cn