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

Posted

技术标签:

【中文标题】geoip_country_by_name 返回空字符串,没有错误【英文标题】:geoip_country_by_name returns empty string, no errors 【发布时间】:2014-07-30 00:10:03 【问题描述】:

我已按照教程设置 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 的任何错误或警告。

编辑:

正如 cmets 中所指出的,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 - 

【问题讨论】:

string geoip_country_name_by_name ( string $hostname ) 仅期望参数 (Manual) @Darren 这也是我在手册中看到的内容,令人惊讶的是,我的教程却相反,试图只将 $hostname 传递给函数,PHP 告诉我“期待第二个参数” 这很时髦。我现在就去看看 Api! 【参考方案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 地址而不是主机名。

【讨论】:

来自PHP documentation: string geoip_country_code_by_name ( string $hostname ) hostname 要查找其位置的主机名或IP地址。

以上是关于geoip_country_by_name 返回空字符串,没有错误的主要内容,如果未能解决你的问题,请参考以下文章

C++ Qt 返回空的 QString

Hibernate query.list() 方法返回空列表而不是空值

lua 连接MySQL 查询中文项 返回空 该怎么办?

返回一个空的二维数组

为啥facebook相册返回一个空数组?

PaginationAndSortingRepository 返回空