Hướng dẫn dùng geoiplocator trong PHP

answer

87

Hướng dẫn dùng geoiplocator trong PHP

Có những API miễn phí, dễ dàng mà bạn có thể sử dụng, như những API:

  • http://ipinfodb.com/ip_location_api.php
  • http://www.ipgeo.com/api/
  • http://ip2.cc/
  • http://www.geobytes.com/IpLocator.htmlm
  • https://iplocate.io/
  • và nhiều người khác.

Cái nào đáng tin nhất là tùy thuộc vào bạn :)

Mặt khác, có các tập lệnh dựa trên cơ sở dữ liệu cục bộ trên máy chủ của bạn. Dữ liệu cơ sở dữ liệu cần phải được cập nhật thường xuyên, mặc dù. Kiểm tra cái này:

  • http://phpwither.com/software/ip2country

HTH!

Chỉnh sửa: Và tất nhiên, tùy thuộc vào dự án của bạn, bạn có thể muốn xem các tính năng Vị trí HTML5 . Bạn chưa thể sử dụng chúng trên Internet Explorer (IE9 sẽ hỗ trợ nó, còn lâu mới đi được), nhưng trong trường hợp khán giả của bạn chủ yếu sử dụng thiết bị di động hoặc sử dụng Safari / Firefox thì thật đáng để xem xét!

Khi bạn có tọa độ, bạn có thể đảo ngược mã địa lý chúng thành mã quốc gia. Một lần nữa, có các API như thế này:

  • Ví dụ: http://ws.geonames.org/countryCode?lat=47.03&lng=10.2
  • API khác: http://www.geonames.org/export/ws-overview.html

Cập nhật, tháng 4 năm 2013
Hôm nay tôi khuyên bạn nên sử dụng Geocoder , một thư viện PHP giúp dễ dàng mã hóa địa chỉ IP cũng như dữ liệu địa chỉ bưu chính.

*** Cập nhật, tháng 9 năm 2016
Vì chính trị quyền riêng tư của Google đã thay đổi, bạn không thể sử dụng API định vị địa lý HTML5 nếu máy chủ của bạn không có chứng chỉ HTPPS hoặc người dùng không cho phép bạn kiểm tra vị trí của anh ấy. Vì vậy, bây giờ bạn có thể sử dụng IP của người dùng và đăng ký PHP hoặc nhận chứng chỉ HTTPS.

87 hữu ích 2 bình luận chia sẻ

answer

54

Có nhiều API web khác nhau sẽ làm điều này cho bạn. Đây là một ví dụ sử dụng dịch vụ của tôi, http://ipinfo.io :

$ip = $_SERVER['REMOTE_ADDR']; $details = json_decode(file_get_contents("http://ipinfo.io/{$ip}")); echo $details->country;// -> "US"

API web là một giải pháp nhanh chóng và dễ dàng, nhưng nếu bạn cần thực hiện nhiều tra cứu thì có một cơ sở dữ liệu IP -> quốc gia trên máy của riêng bạn là một giải pháp tốt hơn. MaxMind cung cấp một cơ sở dữ liệu miễn phí mà bạn có thể sử dụng với các thư viện PHP khác nhau, bao gồm GeoIP .

54 hữu ích 3 bình luận chia sẻ

answer

25

Bạn có thể tải xuống các bảng ip từ MaxMind:

http://www.maxmind.com/app/geolite

Nhập CSV vào cơ sở dữ liệu của bạn (đảm bảo tạo chỉ mục cho ip_long_from + ip_long_to). Sau đó, bạn có thể chỉ cần làm:

$iplong = ip2long($_SERVER['REMOTE_ADDR']);// should use mysqli with prepared statements etc, but just an example mysql_query(" SELECT country FROM ip_table WHERE $iplong BETWEEN ip_long_from AND ip_long_to LIMIT 1 ");

25 hữu ích 3 bình luận chia sẻ

answer

9

Đây là một ví dụ sử dụng http://www.geoplugin.net/json.gp

$ip = $_SERVER['REMOTE_ADDR']; $details = json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip={$ip}")); echo $details;
  • Xem thêm tại: http://channasmcs.blogspot.com/2014/11/get-country-of-ip-address-with-php.html#sthash.7u3WCwQq.dpuf

9 hữu ích 0 bình luận chia sẻ

answer

6

Bạn có thể lấy quốc gia từ địa chỉ IP bằng API vị trí này

echo file_get_contents('https://ipapi.co/8.8.8.8/country/');

Phản ứng

US

Đây là một câu đố . Phản hồi là textkhi bạn truy vấn một trường cụ thể, ví dụ countryở đây. Không cần giải mã, chỉ cần cắm nó vào mã của bạn.

PS Nếu bạn muốn tất cả các trường https://ipapi.co/8.8.8.8/json/, ví dụ , phản hồi là JSON.

6 hữu ích 1 bình luận chia sẻ

answer

5

Nhìn vào các chức năng GeoIP trong "Các tiện ích mở rộng cơ bản khác". http://php.net/manual/en/book.geoip.php

5 hữu ích 3 bình luận chia sẻ

answer

5

Tôi thấy có rất nhiều câu trả lời, nhưng không ai trong số họ đề cập https://freegeoip.net/

Bạn được phép lên đến 15,000 queries per hour. Tôi nghĩ rằng đó là đủ trong hầu hết các trường hợp. Mặt khác, bạn nên suy nghĩ về việc sử dụng cơ sở dữ liệu cục bộ từ MaxMind GeoIP .

Freegeoip là mã nguồn mở và bạn có thể tìm các nguồn trên github , triển khai nó cục bộ và thoát khỏi các giới hạn truy vấn.

Ngoài ra, dịch vụ cung cấp vĩ độ / kinh độ / múi giờ và các công cụ hữu ích khác.

5 hữu ích 0 bình luận chia sẻ

answer

4

$country_code = trim(file_get_contents("http://ipinfo.io/{$ip_address}/country"))

sẽ giúp bạn có được mã quốc gia.

4 hữu ích 0 bình luận chia sẻ

answer

2

Cài đặt và sử dụng phần mở rộng GeoIP của PHP nếu bạn có thể. Trên debian lenny:

sudo wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz sudo gunzip GeoLiteCity.dat.gz sudo mkdir -v /usr/share/GeoIP sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat sudo apt-get install php5-geoip # or sudo apt-get install php-geoip for PHP7

và sau đó thử nó trong PHP:

$ip = $_SERVER['REMOTE_ADDR']; $country = geoip_country_name_by_name($ip); echo 'The current user is located in: '. $country;

trả về:

The current user is located in:Cameroon

2 hữu ích 0 bình luận chia sẻ

answer

1

Tôi thấy bài viết trên blog này rất hữu ích. Nó đã cứu ngày của tôi. http://www.techsirius.com/2014/05/simple-geo-tracking-system.html

Về cơ bản, bạn cần cài đặt bảng cơ sở dữ liệu IP và sau đó thực hiện truy vấn mysql cho IP cho vị trí.

php include 'config.php'; mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) OR die(mysql_error()); mysql_select_db(DB_NAME) OR die(mysql_error()); $ip = $_SERVER['REMOTE_ADDR']; $long = sprintf('%u', ip2long($ip)); $sql ="SELECT * FROM `geo_ips` WHERE '$long' BETWEEN `ip_start` AND `ip_end`"; $result = mysql_query($sql) OR die(mysql_error()); $ip_detail = mysql_fetch_assoc($result);if($ip_detail){ echo $ip_detail['country']."', '".$ip_detail['state']."', '".$ip_detail['city'];}else{//Something wrong with IP}

1 hữu ích 2 bình luận chia sẻ

answer

1

Đây là một API miễn phí khác cho các yêu cầu định vị địa lý: http://geoip.nekudo.com

Phản hồi ở định dạng JSON. Ngoài ra, mã nguồn API có sẵn trên github trong trường hợp bạn cần thiết lập API của riêng mình.

1 hữu ích 0 bình luận chia sẻ

answer

1

Nếu bạn cần có một cơ sở dữ liệu tốt và được cập nhật, để có hiệu suất cao hơn và không yêu cầu các dịch vụ bên ngoài từ trang web của bạn, thì đây là nơi tốt để tải xuống cơ sở dữ liệu chính xác và cập nhật.

Tôi khuyên bạn nên làm điều này bởi vì theo kinh nghiệm của tôi, nó hoạt động rất tốt kể cả địa điểm thành phố và quốc gia cho IP của tôi mà hầu hết các cơ sở dữ liệu / apis khác không bao gồm / báo cáo vị trí của tôi ngoại trừ dịch vụ này hướng tôi đến cơ sở dữ liệu này.
(Vị trí ip của tôi là từ "Rasht" City ở "Iran" khi tôi đang thử nghiệm và ip là: 2.187.21.235bằng 45815275)

Do đó, tôi khuyên bạn nên sử dụng các dịch vụ này nếu bạn không chắc chắn về dịch vụ nào chính xác hơn:

Cơ sở dữ liệu: http://lite.ip2location.com/databases

Dịch vụ API: http://ipinfodb.com/ip_location_api.php

1 hữu ích 0 bình luận chia sẻ

answer

1

Bạn có thể sử dụng https://ip-api.io/ để lấy tên quốc gia, tên thành phố, vĩ độ và kinh độ. Nó hỗ trợ IPv6.

Như một phần thưởng, nó sẽ cho biết nếu địa chỉ IP là nút tor, proxy công cộng hoặc spammer.

Mã Php:

$result = json_decode(file_get_contents('http://ip-api.io/json/64.30.228.118')); var_dump($result);

Đầu ra:

{"ip":"64.30.228.118","country_code":"US", "country_name":"United States","region_code":"FL","region_name":"Florida","city":"Fort Lauderdale","zip_code": "33309","time_zone":"America/New_York","latitude":26.1882,"longitude":-80.1711,"metro_code":528, "suspicious_factors":{"is_proxy":false,"is_tor_node":false,"is_spam":false,"is_suspicious":false}

1 hữu ích 0 bình luận chia sẻ

answer

1

Tôi chạy dịch vụ tại IPLocate.io , nơi bạn có thể kết nối miễn phí với một cuộc gọi dễ dàng:

php $res = file_get_contents('https://www.iplocate.io/api/lookup/8.8.8.8'); $res = json_decode($res); echo $res->country;// United States echo $res->continent;// North America echo $res->latitude;// 37.751 echo $res->longitude;// -97.822 var_dump($res);

Các $resđối tượng sẽ chứa các lĩnh vực định vị của bạn như country, cityvv

Kiểm tra các tài liệu để biết thêm thông tin.

1 hữu ích 0 bình luận chia sẻ

answer

1

Ipdata.co cung cấp một API có thể mở rộng để làm điều này. Với 10 điểm cuối toàn cầu, mỗi điểm có thể xử lý> 800 triệu yêu cầu hàng ngày!

Nó cũng cung cấp cho bạn tổ chức, tiền tệ, múi giờ, mã gọi, cờ và dữ liệu trạng thái Tor Thoát Node từ bất kỳ địa chỉ IPv4 hoặc IPv6 nào.

Trong php

php > $ip ='8.8.8.8'; php > $details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}")); php > echo $details->region;California php > echo $details->city;MountainView php > echo $details->country_name;UnitedStates php > echo $details->location;37.405991,-122.078514

Khước từ

Tôi đã xây dựng dịch vụ này.

1 hữu ích 0 bình luận chia sẻ

answer

0

Sử dụng tiện ích www.feedsalive.com , để nhận thông tin quốc gia & thông tin trang cuối cùng.

0 hữu ích 0 bình luận chia sẻ