我已经按照教程设置了geoip。我已将文件上传到我的服务器,这是我的代码:
<?php
include_once('geoip.inc');
$gi = geoip_open('GeoIP.dat', GEOIP_STANDARD);
include_once('sql_conn.php');
$sql = "SELECT ip,vid FROM views";
$result = mysqli_query($con, $sql);
while ($row = mysqli_fetch_array($result)) {
$ip = $row['ip'];
$country = geoip_country_name_by_name($gi, $ip);
echo $ip . " - " . $country . "<br />";
}
geoip_close($gi);
?>
我试图通过传递IP地址来获取国名。我的输出是IE:
180.76.5.21 -
162.222.182.156 -
190.247.137.160 -
190.247.137.160 -
190.247.137.160 -
我没有收到PHP的任何错误或警告。
编辑:
正如评论中指出的那样,PHP手册说geoip_country_name_by_name
只需要一个参数,但是当我只传递$ ip时会发生这种情况:
Warning: Missing argument 2 for geoip_country_name_by_name(), called in /home/rlcoachi/public_html/admin/update_db.php on line 12 and defined in /home/rlcoachi/public_html/admin/geoip.inc on line 448
90.221.27.198 -
答案 0 :(得分:1)
我认为我已经缩小了这个问题。您正在尝试使用geoip_country_name_by_name()
,通过MaxMinds GeoIP Api需要一个名称(即主机名)。
你最想尝试的是这样的:
while ($row = mysqli_fetch_array($result)) {
$ip = $row['ip'];
$country = geoip_country_name_by_addr($gi, $ip);
echo $ip . " - " . $country . "<br />";
}
使用get_country_name_by_addr()
代替,因为您要传递IP地址而不是主机名。