以下では、Laravelフレームワークのチュートリアルコラムで、IPに基づいて州と都市の名前を取得する方法を紹介します。これが、困っている友人の役に立つことを願っています。
ジオロケーションを取得するためのIPによると、私はlaravelのtorann / geoipパッケージを試しましたが、これはあまり正確ではありません。地理情報を取得するためのBaiduAPI呼び出しの方法もあります。メンテナンスコストを削減するために、thinkphp3.2のパッケージが最終的に使用されました。これが組み込みのtpフレームワークであるかどうかは不明です。このパッケージを取得して検索するための原則は、組み込みの州および市町村のデータベースUTFWry.datです。
laravelプロジェクトの使用方法
プロジェクトアプリの同じディレクトリSDKに配置しました。これを使用できるようにするには、composer.jsonがIpLocation.class.phpをクラスマップの自動読み込みに追加して、ファイルに含まれるクラスが呼び出されたときに自動的に読み込まれるようにする必要があります(理由がわからない場合)自動ロードされる場合は、Laravel Composerの自動ロードの原則を参照してください)。
1
2
3
4
5
6
"autoload":{ "classmap":[ "database / seeds"、 "database / factorys" 、"sdk / Org / Net / IpLocation.class.php" ]}、composerdumpの実行-基本的な使用法自動ロード1 2 3
$ ip = new \ Org \ Net \ IpLocation( 'UTFWry.dat');
$ location = $ ip-> getlocation( '223.104.1.100');
dd($ location);
1.標準の戻り値については、
次のようになります。広東省シンセンIP例
1枚の
2
3
4
5
6
7
#印刷結果の
配列:5 [
"IP" => "223.104.1.100"
"beginip" => "223.104.1.0"
"endip" => "223.104.1.255"
、「国"=>"広東省深セン "
"エリア "=>"モバイル "]
2。地域ごとの戻り値が異なり、左側がデモンストレーションIP、右側が戻りエリア名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#市町村
'223.104.3.155'、//北京
'223.104.7.155'、//天津市 '223.104.25.155'、//
忠清市
'223.104.5.200'、//上海ウルムチ地区
#自治区
'223.104.15.100'、//モンゴル内ホーホット市 '
223.104.29.100 '、//銀川市、寧夏
' 223.104.30.100 '、//ウルムチ市、
新江' 211.139.74.100 '、//ラサ市、チベット
' 218.204.63.100 '、//ベイズ市、広西
' 1.32.192.100 '、 // Hong Kong
'60 .246 .49.100 '、// Macao
エリアIDを返すメソッド関数をカプセル化します。
頻繁に使用する場合は、通常、app \ Helpersに配置します。PHPでは、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
function get_ip_location($ ip){ $ ip_driver = new \ Org \ Net \ IpLocation( 'UTFWry.dat'); $ location = $ ip_driver-> getlocation($ ip); $ location = $ location ['country']; //広東省深セン
p_id '=> $ Province_id、' c_id '=> 0、' locname '=> $ bj。'市 ']; } }
//その他の標準クエリ
$ expect_ids = [36,37,38,39,69]; //北京と除外する地域を除外
$ province_name = $ city_name = ''; //初期化
$ province_id = $ city_id = 0;
//すべての州データ
$ all_province = DB :: table( 'loc_province')-> whereNotIn( 'id'、$ expect_ids)-> get();
foreach($ all_province as $ prov){ $ name = $ prov -> name; $ prov_pos = mb_strpos($ location、$ name); //ターゲットと一致する 場合if($ prov_pos!== false){ $ province_id = $ prov-> province_id; $ province_name = $ name; // from文字列から州名を削除し、州の単語を削除します $ location = mb_substr($ location、$ prov_pos + mb_strlen($ name));
} else { return $ default; } }
試験
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ testips = [
'223.104.3.155'、//
Beijing'223.104.7.155' 、//
Tianjin'223.104.25.155」、 //
北京市'223.104.5.200'、//上海楚井地区
'
223.104.15.100'、//モンゴル内フフホト市 '223.104.29.100'、//
寧夏陰川市 '223.104.30.100'、//ウルムチ、新江市
'211.139.74.100'、//ラサ市、チベット
'218.204.63.100'、//北京市、広西
'1.32.192.100'、//香港
'60 .246.49.100 '、//マカオ
'223.104.1.100'、//広東省深セン市
];
echo "
"; foreach($ testips as $ ip){ print_r(get_ip_location($ ip)); } テスト結果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 アレイ (( [p_id] => 1 [c_id] => 0 [locname] =>北京 ) アレイ (( [p_id] => 3 [c_id] => 0 [locname] =>天津 ) アレイ (( [p_id] => 4 [c_id] => 0 [locname] =>重慶 ) アレイ (( [p_id] => 2 [c_id] => 0 [locname] =>上海 ) アレイ (( [p_id] => 7 [c_id] => 1 [locname] =>内モンゴル自治区フフホト ) アレイ (( [p_id] => 29 [c_id] => 1 [locname] =>寧夏回族自治区銀川 ) アレイ (( [p_id] => 31 [c_id] => 1 [locname] =>ウルムチ、新疆 ) アレイ (( [p_id] => 26 [c_id] => 1 [locname] =>ラサ、チベット ) アレイ (( [p_id] => 21 [c_id] => 13 [locname] => Baise、Guangxi ) アレイ (( [p_id] => 32 [c_id] => 1 [locname] =>香港 ) アレイ (( [p_id] => 33 [c_id] => 1 [locname] =>マカオ ) アレイ (( [p_id] => 20 [c_id] => 2 [locname] =>深セン、広東 )