2011-10-14 17 views
21

私たちは、IPに基づいて訪問者の場所を迅速かつ正確に取得する方法を探しています。IPアドレスに基づく地理的位置 - PHP

私たちはipinfodb.comを試しましたが、そのAPIはAPIコールを行うときに私たちのウェブサイトをひどく遅らせました。

他にどのようなサービスをお勧めしますか?

+0

可能性の重複:(http://stackoverflow.com/questions/464142/what-services-exist-that-geo-locates-a [IPに基づいて人を地理が-突き止めることが存在するどのようなサービス?] -person-based-on-ip) – hakre

+0

[IPアドレスの国をPHPで取得]の可能な複製(http://stackoverflow.com/questions/3650006/get-country-of-ip-address-with-php) –

+0

Checkout https://ipdata.coは、毎日800M以上のコールを処理できる10個のグローバルエンドポイントを持つ、私が構築したサービスです。超高速で、関連性の高いデータがたくさんあります。 – Jonathan

答えて

38

はジオ-IP情報をチェックする

要求地理IP-サーバー(netip.de)、IPは(ホスト、州、国、町)に位置してリターンを得ます。

<?php 
     $ip='94.219.40.96'; 
     print_r(geoCheckIP($ip)); 
     //Array ([domain] => dslb-094-219-040-096.pools.arcor-ip.net [country] => DE - Germany [state] => Hessen [town] => Erzhausen) 

     //Get an array with geoip-infodata 
     function geoCheckIP($ip) 
     { 
       //check, if the provided ip is valid 
       if(!filter_var($ip, FILTER_VALIDATE_IP)) 
       { 
         throw new InvalidArgumentException("IP is not valid"); 
       } 

       //contact ip-server 
       [email protected]_get_contents('http://www.netip.de/search?query='.$ip); 
       if (empty($response)) 
       { 
         throw new InvalidArgumentException("Error contacting Geo-IP-Server"); 
       } 

       //Array containing all regex-patterns necessary to extract ip-geoinfo from page 
       $patterns=array(); 
       $patterns["domain"] = '#Domain: (.*?)&nbsp;#i'; 
       $patterns["country"] = '#Country: (.*?)&nbsp;#i'; 
       $patterns["state"] = '#State/Region: (.*?)<br#i'; 
       $patterns["town"] = '#City: (.*?)<br#i'; 

       //Array where results will be stored 
       $ipInfo=array(); 

       //check response from ipserver for above patterns 
       foreach ($patterns as $key => $pattern) 
       { 
         //store the result in array 
         $ipInfo[$key] = preg_match($pattern,$response,$value) && !empty($value[1]) ? $value[1] : 'not found'; 
       } 

       return $ipInfo; 
     } 

?> 

Nomsayn?

データベースは、エンタープライズソリューションがDigital Elementで提供し、この宇宙と一つにこのhttp://www.phpandstuff.com/articles/geoip-country-lookup-with-php

+1

これはうれしいことですが、私たちのウェブサイトは何千ものリクエストを受け取り、ジオIPリクエストはページの読み込みごとに行われるため、データベースが好きです。 – Latox

+2

@latox私はちょうど私の質問を更新しました、そのリンクを見てみましょうあなたがnomsayn後何をする必要がありますか? –

+0

@Latox - API呼び出しの結果でローカルキャッシュを維持する場合、新しいIPアドレスごとにAPI呼び出しのオーバーヘッドを支払うだけで済みます。しかし、上記のリンクのDBは、最新の正確さを必要としない限り、あなたのアプリケーションにとって完璧なようです。 – Peter

2

市場のリーダーを使用したい場合。彼らはローカルにインストールするか、Webサービスを介してアクセスすることができる自分のサーバーにアクセスするために、PHPを含む広範なAPIを提供しています。彼らのデータは高品質であり、ソリューションのパフォーマンスはかなり良いです。 MaxMindはまた、良いレビューを受け取る別のオプションです。

最高の精度を得るには、特定のネットワーク内でかなり変化することがあるため、毎週更新されるサービスまたはソリューションを選択することをおすすめします。コストは、更新の頻度、ジオデータの粒度、および必要な追加フィールドまたはデータベースの数によって異なります。一部のプロバイダは、言語、人口統計、会社、ドメインを提供しています。

3

を続きを読むませんPHPコードです。コードは要求を自動的にキャッシュするので、サーバーは複数の要求を送信しません。 IPアドレス、国、都市などの情報を返します。

<?php 
// Required Libraries 
require_once("ip.codehelper.io.php"); 
require_once("php_fast_cache.php"); 

// New Class 
$_ip = new ip_codehelper(); 

// Detect Real IP Address & Location 
$real_client_ip_address = $_ip->getRealIP(); 
$visitor_location  = $_ip->getLocation($real_client_ip_address); 

// Output result 
echo $visitor_location['Country'].""; 
echo "<pre>"; 
print_r($visitor_location); 
関連する問題