2011-10-14 17 views
21

Ziyaretçilerin konumunu IP'lerine göre almak için hızlı ve doğru bir yol arıyoruz.Coğrafi Konum IP Adresine göre - PHP

ipinfodb.com'u denedik ancak API'ları API çağrısı yaparken web sitemizi ciddi şekilde geciktirdi.

Başka neler önerirsiniz? Bir IP (ev sahibi, eyalet, ülke kasaba) bulunduğu bir jeo-IP-sunucu (netip.de) kontrol etmek

+0

Olası Çoğalt: [? Hizmetler IP'ye dayalı bir kişi jeo-bulur o var ne] (http://stackoverflow.com/questions/464142/what-services-exist-that-geo-locates-a -persona dayalı-on-ip) – hakre

+0

olası kopyası [PHP ile IP Adresi Ülkesi] (http://stackoverflow.com/questions/3650006/get-country-of-ip-address-with-php) –

+0

Check out https://ipdata.co, her biri 800 milyonu günlük olarak idare edebilen 10 global uç noktaya sahip bir hizmet. Çok hızlı ve çok alakalı veriler var. – Jonathan

cevap

38

Jeo-IP Bilgi Al

İstekler döndürür.

<?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?

bir veritabanı bir kuruluş çözümü Digital Element olduğunu sağlayan bu boşluk ve birinde bu http://www.phpandstuff.com/articles/geoip-country-lookup-with-php

+1

Bu güzel, ancak web sitemiz binlerce talep aldığından ve sayfa yükü başına coğrafi IP talebi yapılacağından veri tabanını tercih ediyorum. – Latox

+2

@latox Soruyu yeni güncelledim, bu linke bir bakalım, sonradan ne yazıyorsunuz? –

+0

@Latox - API çağrılarınızın sonuçlarıyla yerel bir önbellek tutarsanız, yalnızca her yeni IP adresi için bir API çağrısının yükünü ödemek zorunda kalırsınız. Ancak, yukarıdaki bağlantıdaki DB, en güncel doğruluğa ihtiyacınız olmadığı sürece uygulamanız için mükemmel görünüyor. – Peter

2

pazar lideri kullanmak istiyorum. Yerel olarak yükleyebileceğiniz veya bir web servisi üzerinden erişebileceğiniz sunucularına erişmek için PHP de dahil olmak üzere çok çeşitli API'lar sunarlar. Verileri yüksek kalitededir ve çözümlerinin performansı oldukça iyidir. MaxMind, iyi değerlendirmeleri alan başka bir seçenektir.

En iyi doğruluk için, haftalık güncellemelerinizi aldığınız bir hizmet veya çözümü tercih etmek istersiniz, çünkü bu şeyler belirli bir ağda biraz değişebilir. Maliyet, güncellemelerin sıklığına, coğrafi verilerin ayrıntılarına ve istediğiniz ek alanların veya veritabanlarının sayısına bağlıdır. Bazı sağlayıcılar birkaç isim vermek için dil, demografi, şirket ve alan adı sunar.

3

İşte bu bir http://ip.codehelper.io/

deneyin bu bağlantıdan devamı olan PHP kodudur. Kod isteğinizi otomatik olarak önbelleğe alacaktır, böylece sunucunuz birden fazla istek göndermeyecektir. IP Adresi, Ülke, Şehir ve daha fazla bilgi döndürün.

<?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);