geoip_country_by_name返回空字符串,没有错误

时间:2014-07-30 00:10:04

标签: php geoip

我已经按照教程设置了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 - 

1 个答案:

答案 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地址而不是主机名。