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 返回空字符串,没有错误的主要内容,如果未能解决你的问题,请参考以下文章