Apache mod_geoip - 如果国家/大陆未知,$ _SERVER ['GEOIP_COUNTRY_CODE'] / $ _SERVER ['GEOIP_CONTINENT_CODE']会有什么相同的?

时间:2012-06-06 04:13:33

标签: php apache geoip

我们使用apach mod_geoip和php的geoip.so模块来检测用户正在访问的国家/地区。

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

这是多余的。

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

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

以前,在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会将这2个变量设置为什么?

感谢。

1 个答案:

答案 0 :(得分:2)

我们决定看看mod_geoip源。

来自Changes文件:

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);
}