要查詢 IP 所屬國家, 一般上會用 IP 資料庫查詢, 網上也有一些網站可以免費查詢, 但如果想在自己的 PHP 程式, 查詢 IP 所屬國家, 便需要下載一些 IP 轉國家的資料庫, 有付費及免費。
另一個較簡單方便的做法, 是使用 API 查詢, 以下會示範使用 freegeoip.net 的免費服務查詢 IP 所屬國家的方法。
freegeoip.net 把供 CSV, XML 及 JSON 幾種格式的 API, 使用方法也很簡單, 例如想取得 8.8.8.8 的資料, 只要開啟以下網站:
CSV:
http://freegeoip.net/csv/8.8.8.8
XML:
http://freegeoip.net/xml/8.8.8.8
JSON:
http://freegeoip.net/json/8.8.8.8
以下是使用 PHP 內建的 json_decode() 函式, 讀取 freegeoip 的 JSON 資料的例子。
freegeoip 回傳的資料, 除了國家名稱外, 也有國家代號, 區域, 城市, 郵政編號及時區等, 以下是回傳的參考資料:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "ip":"8.8.8.8", "country_code":"US", "country_name":"United States", "region_code":"", "region_name":"", "city":"", "zip_code":"", "time_zone":"", "latitude":37.751, "longitude":-97.822, "metro_code":0 } |
現在假設只要取得 country_name, 即國家名稱, 可以這樣寫:
|
1 2 3 4 5 6 7 8 9 |
<?php // 定義要查詢的 IP $ip = "8.8.8.8"; // 讀取 JSON 的資料 $result = json_decode(file_get_contents("http://freegeoip.net/json/" . $ip)); echo $result->country_name ?> |
以上方法除了可以在 PHP 使用外, 在其他程式語言 (如 Shell Script, Python) 使用也很方便, 如果需要查詢更詳細的 IP 資料, 例如 IP 所屬的網路供應商等, 便需要購買相關服務了。
主機是自已的可以裝這套 geoip,很好用別人api總有停用的一天靠自已比較實在
https://www.webteach.tw/?p=1630