如何在 php 中进行 geoip 查找?
Posted
技术标签:
【中文标题】如何在 php 中进行 geoip 查找?【英文标题】:How to do a geoip lookup in php? 【发布时间】:2011-06-27 21:27:14 【问题描述】:我看到的所有教程都指向了像geoip_record_by_name
这样的函数。我总是收到这个错误:Fatal error: Call to undefined function geoip_record_by_name() in /home/<acct>/public_html/geoip.php on line <line>
我在“共享”主机上,这意味着我无权安装 PECL geoip 扩展。
还有哪些其他(免费!)方法可以执行 geoip 查找?最好是不依赖外部服务的?
【问题讨论】:
有一些服务可以让您下载 csv 格式的粗粒度数据库,从而将 IPS 降到***别。但否则你会被外部服务困住。如果提供者的 API 不是太糟糕,您可能可以通过一些 CURL 调用重新创建 geoip_*() 函数。 这些服务如何确定您的 IP 地址在哪里?他们如何获得开始的位置?我怎样才能生成自己的数据库? 既然有免费的 API 可以为您提供数据库,为什么还要创建自己的数据库?从头开始创建自己的数据库需要一个人几年的时间。 @imoda 它们是如何生成的? @Cyclone 我不知道具体情况。我认为这是一个非常细致的过程。 【参考方案1】:如果您有 mysql 服务器,可以免费使用和安装 IP 数据库,然后执行 $_SERVER['REMOTE_ADDR']
并针对数据库数据运行它。
即(基于一些任意的数据库)
<?php
$result = mysql_query("SELECT *
FROM ips
WHERE ip = $_SERVER['REMOTE_ADDR']
LIMIT 1") or die(mysql_error());
$row = mysql_fetch_assoc($result);
$city = $row['city'];
$state = $row['state'];
$country = $row['country'];
?>
一些数据库(或者只是google它):http://www.ipinfodb.com/ip_database.php
编辑
您还可以从其他 API 发出 JSON/XML 请求并解析数据:
即(再次使用 ipinfodb.com)
$doc->loadXML(file_get_contents("http://api.ipinfodb.com/v2/ip_query.php?key=your_key&ip=" . $_SERVER['REMOTE_ADDR'] . "&timezone=false"));
$country = $doc->getElementsByTagName('CountryName')->item(0)->nodeValue;
【讨论】:
有没有办法自己生成数据库? 对您的原始问题发表评论。当然,您可以创建自己的数据库,但没有真正快速简便的方法。【参考方案2】:您可以尝试 hostip.info、Maxmind 或 ip2location 等等。这些很容易与 PHP 一起使用,并且可以用于共享主机。其中一些还有离线选项。
【讨论】:
第一个和最后一个相差了 50 英里,Maxmind 离得更近了一点,但不是很多...... @Cyclone:一分钱一分货。以上是关于如何在 php 中进行 geoip 查找?的主要内容,如果未能解决你的问题,请参考以下文章
MaxMind GeoIP API:fseek() [function.fseek]:流不支持在 geoip.inc 中查找