2011-10-14 62 views
21

Chúng tôi đang tìm kiếm một cách nhanh chóng và chính xác để có được vị trí của khách truy cập dựa trên IP của họ.Vị trí địa lý dựa trên Địa chỉ IP - PHP

Chúng tôi đã thử ipinfodb.com nhưng API của họ khiến trang web của chúng tôi bị lag nghiêm trọng khi thực hiện cuộc gọi API.

Bạn đề xuất các dịch vụ nào khác?

+0

thể trùng lặp: [? Những dịch vụ tồn tại mà địa nằm một người dựa trên IP] (http://stackoverflow.com/questions/464142/what-services-exist-that-geo-locates-a -person-based-on-ip) – hakre

+0

có thể trùng lặp của [Nhận Quốc gia Địa chỉ IP bằng PHP] (http://stackoverflow.com/questions/3650006/get-country-of-ip-address-with-php) –

+0

Thanh toán https://ipdata.co, một dịch vụ tôi đã tạo có 10 điểm cuối toàn cầu, mỗi người có thể xử lý> 800 triệu cuộc gọi hàng ngày. Nó siêu nhanh và có rất nhiều dữ liệu liên quan. – Jonathan

Trả lời

38

Nhận Geo-IP Thông tin

yêu cầu một địa chỉ IP máy chủ (netip.de) để kiểm tra, trả về nơi một IP nằm (máy chủ, tiểu bang, quốc gia, thị trấn).

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

Nếu bạn muốn có một cơ sở dữ liệu sử dụng lãnh đạo http://www.phpandstuff.com/articles/geoip-country-lookup-with-php

+1

Điều này rất hay, nhưng tôi thích cơ sở dữ liệu hơn vì trang web của chúng tôi nhận được hàng nghìn yêu cầu và yêu cầu địa chỉ IP sẽ được thực hiện trên mỗi lần tải trang. – Latox

+2

@latox tôi vừa cập nhật câu hỏi của tôi, hãy xem liên kết đó phải là những gì bạn đang theo sau nomsayn? –

+0

@Latox - Nếu bạn duy trì bộ nhớ cache cục bộ với kết quả cuộc gọi API của bạn thì bạn chỉ phải trả phí trên của cuộc gọi API cho từng địa chỉ IP mới. Tuy nhiên, DB trong liên kết ở trên có vẻ hoàn hảo cho ứng dụng của bạn, miễn là bạn không cần độ chính xác up-to-the-minute. – Peter

2

Thị trường này trong không gian này và một trong đó cung cấp một giải pháp doanh nghiệp là Digital Element. Họ cung cấp một loạt các API, bao gồm cả PHP, để truy cập vào máy chủ của họ mà bạn có thể cài đặt cục bộ hoặc truy cập thông qua một dịch vụ web. Dữ liệu của họ có chất lượng cao và hiệu suất của giải pháp của họ khá tốt. MaxMind là một lựa chọn khác cũng nhận được đánh giá tốt.

Để có độ chính xác cao nhất, bạn sẽ muốn chọn dịch vụ hoặc giải pháp nơi bạn nhận được bản cập nhật hàng tuần vì nội dung này có thể thay đổi khá nhiều trong một mạng nhất định. Chi phí sẽ tùy thuộc vào tần suất cập nhật, mức độ chi tiết của dữ liệu địa lý và số lượng trường hoặc cơ sở dữ liệu bổ sung mà bạn muốn. Một số nhà cung cấp cung cấp ngôn ngữ, nhân khẩu học, công ty và tên miền cho một vài tên.

4

tốt nhất và mới nhất là GeoplugginAPI miễn phí và không giới hạn tôi đang sử dụng cho điều này trang web của tôi http://spidersoft.in cho vị trí dựa tải về đọc thêm từ liên kết này

http://geoplugin.com

3

Hãy thử điều này một http://ip.codehelper.io/

đây là mã PHP. Mã sẽ tự động lưu trữ yêu cầu của bạn, vì vậy máy chủ của bạn sẽ không gửi nhiều yêu cầu. Trả lại địa chỉ IP, quốc gia, thành phố và nhiều thông tin khác.

<?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); 
Các vấn đề liên quan