5

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

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

谁能帮我解决这个问题?

4

1 回答 1

5

我有同样的问题。似乎 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 那样)。

于 2011-01-27T02:47:13.180 回答