我下载了最新版本的OpenX 2.8.6,并且尝试设置地理位置定位,但是它不起作用。我在管理面板中启用了geoTargeting(配置->全局设置-> Geotargeting模块类型-> OpenX Max mind(平面文件))。我在OpenX文档中读到,没有必要在插件设置中放置数据库的任何路径,因此我尝试不使用它。我将测试横幅的转换选项设置为仅在塞尔维亚展示。我正在重新整理显示横幅的页面,但此横幅从未显示。

我以为问题可能出在旧数据库中,并且我的IP地址无法识别,所以我从MaxMind(Country数据库的精简版)中下载了最新的一个数据库(.dat文件),然后将路径放入了插件的设置中,但它仍然不起作用。

谁能帮我解决这个问题?

最佳答案

我有同样的问题。从2.8.x版本开始,OpenX似乎正在使用其自己的基于php的GeoIP数据库阅读器(例如,设置下的“flatfile”选项),而不是使用geoip模块-似乎不适用于当前的GeoIP.dat

为了解决这个问题,我做了以下工作:

1)打开插件/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将db缓存在内存中要比通过php在每个请求上完成所有操作更快(就像openx那样)。

关于OpenX和地理位置定位问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3710235/

10-08 23:51