我有同样的问题。似乎 OpenX 自 2.8.x 版以来正在使用其自己的基于 php 的 GeoIP-Database 阅读器(例如,设置下的“平面文件”选项)而不是使用 geoip 模块 - 这似乎不适用于当前的 GeoIP.dat
为了解决这个问题,我做了以下事情:
1) 打开plugins/geoTargeting/oxMaxMindGeoIP/oxMaxMindGeoIP.delivery.php
2) 搜索:
if (isset($GLOBALS['_MAX']['GEO_IP'])) {
$ip = $GLOBALS['_MAX']['GEO_IP'];
OX_Delivery_logMessage('['.$ip.'] : ip from cookie. Plugin_geoTargeting_oxMaxMindGeoIP_oxMaxMindGeoIP_Delivery_getGeoInfo', 7);
} else {
$ip = $_SERVER['REMOTE_ADDR'];
OX_Delivery_logMessage('['.$ip.'] : ip from remote addr. Plugin_geoTargeting_oxMaxMindGeoIP_oxMaxMindGeoIP_Delivery_getGeoInfo', 7);
}
$aGeoConf = (is_array($conf['oxMaxMindGeoIP'])) ? $conf['oxMaxMindGeoIP'] : array();
3) 在下面插入:
$ret = array(
"country_code" => $_SERVER['GEOIP_COUNTRY_CODE']
);
return $ret;
4)保存并完成
您将在函数头中找到可能的返回值:
* @return array An array(
* 'country_code',
* 'region',
* 'city',
* 'postal_code',
* 'latitude',
* 'longitude',
* 'dma_code',
* 'area_code',
* 'organisation',
* 'isp',
* 'netspeed'
* );
*/
阅读您的模块文档(mod_geoip)如何从当前(或给定)IP 获取地理数据。在上面的示例中,我使用的是 lighttpd 1.5 + mod_geoip(非官方模块)。但是这个修复也应该适用于 apache_note/pecl-geoip/mod_geoip env...
哦,顺便说一句。当然,它依赖于将数据库缓存在内存中的 mod_geoip 比在每个请求上都通过 php 完成所有操作要快得多(就像 openx 那样)。