【发布时间】:2011-05-24 07:06:15
【问题描述】:
我有一些 IP 地址 ($_SERVER['REMOTE_ADDR']),我必须收到(学习)国家名称,如果我也能收到(学习)城市名称,那就太好了。并且不要忘记它是 php 项目,有用的 API - 非常好。
P.S.这是一个开源项目,我们只能使用免费和开源的工具。
【问题讨论】:
标签: php geolocation geoip
我有一些 IP 地址 ($_SERVER['REMOTE_ADDR']),我必须收到(学习)国家名称,如果我也能收到(学习)城市名称,那就太好了。并且不要忘记它是 php 项目,有用的 API - 非常好。
P.S.这是一个开源项目,我们只能使用免费和开源的工具。
【问题讨论】:
标签: php geolocation geoip
PHP 有一些有用的内置函数GeoIP-functions。它们应该足够了:
$details = geoip_record_by_name($_SERVER['REMOTE_ADDR']);
echo $details['city'];
【讨论】:
您也可以在这里查看:MaxMind GeoIP PHP API
【讨论】:
无(仅需要“GeoIP.dat”文件)。下载免费的 GeoIP 标准国家 数据库,去 http://maxmind.com/download/geoip/database/
安装
只需根据'include_path'指令将'geoip.inc'文件放在某处 您的 'php.ini' 文件,或者将其放在与 PHP 脚本相同的目录中。
用法
通过主机名获取国家/地区名称:
include("geoip.inc");
$gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD);
echo geoip_country_code_by_addr($gi, "24.24.24.24") . "\t" .
geoip_country_name_by_addr($gi, "24.24.24.24") . "\n";
echo geoip_country_code_by_addr($gi, "80.24.24.24") . "\t" .
geoip_country_name_by_addr($gi, "80.24.24.24") . "\n";
HTH。
【讨论】:
geoip_close(),并且您需要其他数据库来收集城市名称和 ASN(他们的 ISP)等信息,并且 IPv6 支持需要以“v6”为后缀的数据库。
ipinfo.io 这样的免费服务不可靠我总是收到错误消息,有时他们会禁止 IP 地址。最后他们从他们的网站“这个产品包括 GeoLite2 数据”使用相同的数据库
我决定使用来自http://lite.ip2location.com/ 的免费数据库,它比迄今为止所有其他人都做得更好。
【讨论】:
在 Linux 环境中 1. sudo yum install php56-devel geoip geoip-devel php-pear 2.须藤pecl安装geoip 3. extension=geoip.so(在php.ini中加入这一行) 4. 将.dat 文件移动到/usr/share/GeoIP 文件夹中
在 Windows 环境中 1. 将 .dll 移至 ext 文件夹 2. 将 .dat 文件移动到 apache/bin 文件夹中 3.在php.ini中添加dll扩展
【讨论】: