IP定位

获得IP

通过以下代码可获得客户端IP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function getUserIpAddr(){
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
//ip from share internet
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
//ip pass from proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}

echo 'User Real IP - '.getUserIpAddr();

然后外接api接口

通过composer获取下资源

1
composer require zoujingli/ip2region

以下代码即可获取到了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ip2region = new Ip2Region();

$ip = '101.105.35.57';

$info = $ip2region->btreeSearch($ip);

var_dump($info);


// array (
// 'city_id' => 2163,
// 'region' => '中国|华南|广东省|深圳市|鹏博士',
// )

调用纯真IP库

github地址

引入

1
composer require 'itbdw/ip-database'

调用

1
2
3
4
5
6
7
8
9
//根据实际情况,基本上用框架(如 Laravel)的话不需要手动引入
//require 'vendor/autoload.php';

use itbdw\Ip\IpLocation;

//支持自定义文件路径
$qqwry_filepath = '/abspath/qqwry.dat';
echo json_encode(IpLocation::getLocation($ip, $qqwry_filepath), JSON_UNESCAPED_UNICODE) . "\n";
echo json_encode(IpLocation::getLocation($ip), JSON_UNESCAPED_UNICODE) . "\n";

相应

1
2
3
4
5
6
7
8
9
{
"ip": "163.177.65.160",
"country": "中国",
"province": "广东",
"city": "深圳市",
"county": "",
"isp": "联通",
"area": "中国广东省深圳市腾讯计算机系统联通节点"
}

测试

1
2
php tests/ip.php -i 58.196.128.0 

在线直接更新

1
2
3
4
# 更新到源码目录 
php ~/bin/update-ip.php

# 更新到指定目录 php ~/bin/update-ip.php -d /tmp

自己手动更新数据库

1,http://www.cz88.net/fox/ipdat.shtml 下载数据库程序(Windows 环境),执行完毕后,即可在程序安装目录找到数据库文件 qqwry.dat

2,复制到 src 目录,覆盖掉原文件即可;或者,把文件同步到服务器特定路径,但这种方式要求调用方法时传入 qqwry.dat 的绝对路径。