2011-10-14 3 views
21

우리는 자신의 IP를 기반으로 방문자 위치를 빠르고 정확하게 찾을 수있는 방법을 찾고 있습니다.지리적 위치는 IP 주소를 기반으로합니다 - PHP

우리는 ipinfodb.com을 시도했지만 API를 호출 할 때 API가 웹 사이트를 심각하게 지연 시켰습니다.

다른 어떤 서비스를 제안합니까? 의 IP가 (호스트, 주, 국가, 도시)의 위치를 ​​지리적-IP 서버 (netip.de가) 확인

+0

가능한 중복 : [? 서비스는 IP를 기반으로 사람을 지리는-에 위치하는 것이 존재하는 무엇 (http://stackoverflow.com/questions/464142/what-services-exist-that-geo-locates-a -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 정보를 얻기

요청 반환합니다.

<?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 방금 내 질문을 업데이트했는데, 그 링크가 당신이 끝나면 무엇이 될 것인가? –

+0

@Latox - API 호출 결과로 로컬 캐시를 유지한다면 새로운 IP 주소마다 API 호출의 오버 헤드 만 지불하면됩니다. 그러나 위의 링크에있는 DB는 최신 정확도가 필요하지 않는 한 응용 프로그램에 완벽하게 보입니다. – Peter

2

시장의 리더를 사용합니다. PHP를 비롯한 다양한 API를 제공하여 로컬에 설치할 수 있거나 웹 서비스를 통해 액세스 할 수있는 서버에 액세스 할 수 있습니다. 그들의 데이터는 고품질이며 솔루션의 성능은 상당히 뛰어납니다. MaxMind는 좋은 리뷰를받는 또 다른 옵션입니다.

최상의 정확성을 위해 주간 업데이트를받는 서비스 또는 솔루션을 선택하는 것이 좋습니다.이 서비스는 주어진 네트워크 내에서 상당히 변경 될 수 있습니다. 비용은 업데이트 빈도, 지역 데이터의 세분성 및 원하는 추가 필드 나 데이터베이스의 수에 따라 달라집니다. 일부 제공 업체는 언어, 인구 통계, 회사 및 도메인을 제공합니다.

3

여기이 하나 http://ip.codehelper.io/

을 시도이 링크에서 자세한 내용을 읽을입니다 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); 
관련 문제