Skip to content

Commit 134835a

Browse files
author
zhao.binyan
committed
兼容 上海交通大学 类似的数据
1 parent 9a0030d commit 134835a

3 files changed

Lines changed: 55 additions & 17 deletions

File tree

README.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,16 @@ echo json_encode(IpLocation::getLocation($ip), JSON_UNESCAPED_UNICODE) . "\n";
5656
}
5757
```
5858

59+
60+
## 测试
61+
62+
```
63+
php tests/ip.php
64+
65+
php tests/ip.php -i 58.196.128.0
66+
67+
```
68+
5969
## 典型返回
6070
```
6171
{"ip":"172.217.25.14","country":"美国","province":"","city":"","county":"","isp":"","area":"美国加利福尼亚州圣克拉拉县山景市谷歌公司"}
@@ -73,7 +83,7 @@ echo json_encode(IpLocation::getLocation($ip), JSON_UNESCAPED_UNICODE) . "\n";
7383
`php ~/bin/update-ip.php`
7484

7585
更新到指定目录
76-
`php ~/bin/update-ip.php -d=/tmp`
86+
`php ~/bin/update-ip.php -d /tmp`
7787

7888
### 【或者】自己手动更新数据库
7989

src/IpLocation.php

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -251,28 +251,37 @@ private function getAddr($ip)
251251
//直辖市
252252
if (in_array($value, $this->dict_city_directly)) {
253253
$_tmp_province = explode($seperator_shi, $location['country']);
254-
//直辖市
255-
$location['province'] = $_tmp_province[0];
256-
257-
//市辖区
258-
if (isset($_tmp_province[1])) {
259-
if (strpos($_tmp_province[1], $seperator_qu) !== false) {
260-
$_tmp_qu = explode($seperator_qu, $_tmp_province[1]);
261-
$location['city'] = $_tmp_qu[0] . $seperator_qu;
254+
255+
// 上海市浦江区xxx
256+
if ($_tmp_province[0] == $value) {
257+
//直辖市
258+
$location['province'] = $_tmp_province[0];
259+
260+
//市辖区
261+
if (isset($_tmp_province[1])) {
262+
if (strpos($_tmp_province[1], $seperator_qu) !== false) {
263+
$_tmp_qu = explode($seperator_qu, $_tmp_province[1]);
264+
$location['city'] = $_tmp_qu[0] . $seperator_qu;
265+
}
262266
}
267+
} else {
268+
//上海交通大学
269+
$location['province'] = $value;
270+
$location['org_area'] = $location['org_country'] . $location['org_area'];
263271
}
272+
264273
} else {
265274
//省
266275
$location['province'] = $value;
267276

268277
//没有省份标志 只能替换
269278
$_tmp_city = str_replace($location['province'], '', $location['country']);
270279

271-
//防止直辖市捣乱 上海市xxx区 =》 市xx区
272-
$_tmp_shi_pos = mb_stripos($_tmp_city, $seperator_shi);
273-
if ($_tmp_shi_pos === 0) {
274-
$_tmp_city = mb_substr($_tmp_city, 1);
275-
}
280+
//防止直辖市捣乱 上海市xxx区 =》 市xx区
281+
$_tmp_shi_pos = mb_stripos($_tmp_city, $seperator_shi);
282+
if ($_tmp_shi_pos === 0) {
283+
$_tmp_city = mb_substr($_tmp_city, 1);
284+
}
276285

277286
//内蒙古 类型的 获取市县信息
278287
if (strpos($_tmp_city, $seperator_shi) !== false) {
@@ -325,7 +334,6 @@ private function getAddr($ip)
325334

326335
$result['area'] = $location['country'] . $location['province'] . $location['city'] . $location['county'] . $location['org_area'];
327336
}
328-
329337
return $result; //array
330338
}
331339

tests/ip.php

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
//you do not need to do this if use composer!
88
require dirname(__DIR__) . '/src/IpLocation.php';
99

10+
$input = getopt("i:", ['ip:']);
11+
1012
use itbdw\Ip\IpLocation;
1113

1214
$ips = [
@@ -15,12 +17,30 @@
1517
"123.125.115.110",//北京
1618
"221.196.0.0",//
1719
"60.195.153.98",
20+
21+
//bug ip 都是涉及到直辖市的
22+
"218.193.183.35", //"province":"上海交通大学闵行校区",
23+
"210.74.2.227", //,"province":"北京工业大学","city":"",
24+
"162.105.217.0", //,"province":"北京大学万柳学区","ci
25+
26+
27+
1828
];
1929

20-
foreach ($ips as $ip) {
30+
if (isset($input['i']) || isset($input['ip'])) {
31+
$ips = [];
2132

22-
echo json_encode(IpLocation::getLocation($ip), JSON_UNESCAPED_UNICODE) . "\n";
33+
if (isset($input['i'])) {
34+
$ips[] = $input['i'];
35+
}
36+
37+
if (isset($input['ip'])) {
38+
$ips[] = $input['ip'];
39+
}
40+
}
2341

42+
foreach ($ips as $ip) {
43+
echo json_encode(IpLocation::getLocation($ip), JSON_UNESCAPED_UNICODE) . "\n";
2444
}
2545

2646

0 commit comments

Comments
 (0)