0

我们使用 apaches mod_geoip 和 php 的 geoip.so 模块来检测用户访问的国家/大陆。

最初我们只使用 PHP,但几个月前我们开始在我们的 apache 配置中使用 geoip 数据,所以现在我们同时使用两者。

这是多余的。

我们正在考虑禁用 php 的 geoip.so,因为我们已经在 $_SERVER['GEOIP_COUNTRY_CODE'] / $_SERVER['GEOIP_CONTINENT_CODE'] 中公开了国家/大陆。

在我们这样做之前,如果 geoip 无法检测到用户的位置,我们需要知道这 2 将等于什么。

以前,在 php 端,我们使用了以下内容:

function geoiplookup($ip){
    if($return=@geoip_country_code_by_name($ip))
        return $return;
    return false;
}

因此,如果 geoip_country_code_by_name 无法检索国家代码,因此返回 false,我们将脚本存储的国家代码设置为 (bool)false。

所以,

使用 apache mod_geoip 时,如果无法检索国家代码,geoip 会将这两个变量设置为什么?

谢谢。

4

1 回答 1

2

我们决定看一下 mod_geoip 源代码。

从更改文件中:

1.3.3 2008 年 8 月 13 日

  • 修复 GEOIP_COUNTRY_CODE 未设置,当使用区域数据库且未找到国家/地区时。以前 GEOIP_COUNTRY_CODE 已设置但为空(Boris Zentner)

因此,如果从提供的 IP 中无法找到一个国家/大陆,则根本不会设置 GEOIP_COUNTRYC_CODE。

有人可以确认这一点,因为这是我们代码库中相当重要的部分,我们需要确保。

我们很难通过 C 代码查看未知国家/地区的确切情况。


据我们所知,是的,只有在可以检测到国家/地区时才设置 GEOIP_COUNTRY_CODE。

从 mod_geoip 来源:

if (cfg->GeoIPOutput & GEOIP_NOTES) {
    ap_table_set(r->notes, "GEOIP_CONTINENT_CODE", continent_code);
    ap_table_set(r->notes, "GEOIP_COUNTRY_CODE", country_code);
    ap_table_set(r->notes, "GEOIP_COUNTRY_NAME", country_name);
}
于 2012-06-06T05:01:54.353 回答