Hướng dẫn dùng geo-ip lookup trong PHP
answer 87 Có những API miễn phí, dễ dàng mà bạn có thể sử dụng, như những API:
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:
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:
Cập nhật, tháng 4 năm
2013 *** Cập nhật, tháng 9 năm 2016 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;
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 Mã 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 PHP7và 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:Cameroon2 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. 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.078514Khướ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ẻ |