要查询 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