ホームページ  >  記事  >  バックエンド開発  >  PHP は外部サービスを呼び出して IP 地域情報を取得し、地域情報の関連付けを実装します_PHP チュートリアル

PHP は外部サービスを呼び出して IP 地域情報を取得し、地域情報の関連付けを実装します_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 14:54:181000ブラウズ

最近のプロジェクトでは地理的分布情報の表示が必要なため、IP と州および地方自治体の情報をより詳しく理解できます

ユーザーの周囲の情報の取得を実現するために、次の 2 つのソリューションが使用されます

1. IP ライブラリを使用します。純粋な IP ライブラリですが、データベースの更新が遅く、ファイルが大きく、多くのリソースを消費します。

2. open.baidu.com の IPSEARCH サービスを呼び出し、IP138 データベースを使用して、IP が存在する州と都市の情報を取得します。次に、ローカル データベース (ecshop の地域テーブル) を検索して、対応する地域 ID を取得し、関連付けます。 ID を介した関連データ

今日試してみたら良い感じだったので実装コードを載せておきます

/**

* IP が存在する都市に関する情報を取得します
* TODO: IP アドレス キャッシュを構築する必要があります
* @param string $ip
*/
function get_city($ip=null) {
import('ORG.Util.Utility')
$d = M('region');
//TODO: ここでキャッシュを構築して都市リストを検索します $cities = $d->where('`regiontype`=2')->select(); ($ip) ? $ip : get_client_ip();
$url = "http://open.baidu.com/ipsearch/s?wd={$ip}&tn=baiduip"; :HttpRequest($ url), 'UTF-8', 'GBK');
if (preg_match('#from:(.+)#Ui', $res, $m) ) {
foreach ( $cities AS $value) {
if ( FALSE !== strpos($m[1], $value['regionname']) ) {
//都市の IP 情報を返す
$array ['c'] =$value;
$array['p']=$d->where('`regionid`='.$value['parentid'])->find(); array;
}
}
}
return array();
}
呼び出しによって返される結果は次のとおりです。 array
'c' =>
'regionid' => 3)
'parentid' => 文字列 '31' (長さ=2)
'regionname' => 文字列 'Jinhua' (長さ=6)
'regiontype' => 文字列 '2' (長さ=1)
'agencyid' => 文字列 ' 0' (length=1)
'ename' =>
array 'regionid' => 31' (長さ=2)
' 親ID' => 文字列 '1' (長さ=1)
'地域名' => 文字列 '浙江省' (長さ=6)
'地域タイプ' => (length=1)
'agencyid' => 文字列 '0' (length=1)
'ename' => 文字列 'zhejiang' (length=8)

IP でテスト済み、情報は非常に正確です、IP138 IPデータベースと123CHA 国内時刻データベースの中では比較的充実したデータベースであり、性能も悪くありません。




http://www.bkjia.com/PHPjc/364599.html

www.bkjia.com

本当

http://www.bkjia.com/PHPjc/364599.html技術記事最近のプロジェクトでは地理的分布情報の表示が必要だったので、IP と地方自治体の情報について学びました。1. 使用された IP ライブラリ、純粋な IP ライブラリ。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。