垃圾评论真的是害人不浅,为了避免垃圾评论的骚扰,请各位大虾评论的时候稍微辛苦下登录后再发,注册网站用户非常简单,一分钟不到即可。
谢谢!
网站设置调整–注册发表评论
May 4th, 2010 by pinson 2 comments »Openx2.8.5简体中文语言包(原语言包有部分乱码)
April 20th, 2010 by ataal 3 comments »如标题,所以用繁体中文转换了一份简体中文。可以从如下地址下的http://openxchina.org/wp-content/uploads/2010/04/zh_CN.rar
提示:繁体和简体中的语言项略有不同,另外还有就是少数几个语言项仍然是繁体。
如果有同学想解决这个问题,也可以自己尝试。方法如下:
1.找到lib\max\language中对应的语言项如zh_CN和zh_TW
2.网上找个繁简转换的工具,转换一下所有的文件
3.注意一下文件的编码格式,如果看到不是utf8的,请转换成utf8。
openx2.6.2生成excel表格时遇到乱码的修改方法
April 14th, 2010 by qvbfndcwy No comments »我使用的版本是openx-2.6.2。在导出excel表格时遇到乱码,现把自己想到解决方法记录一下:
1、文件名:lib/pear/Spreadsheet/Excel/Writer.php文件的function send($filename)函数,第67行加上$filename = iconv(“utf-8″, “gb2312″, $filename);文件名由CA3Q2D77.变成广告分析报告 From Beginning 到 27-03-2009.xls。
2、excel文件内容:lib/pear/Spreadsheet/Excel/Writer/Worksheet.php文件的Writerfunction write($row, $col, $token, $format = 0)函数,第1166行替换为return $this->writeString($row, $col, iconv(“utf-8″, “gb2312″, $token), $format);
3、工作表名称:lib/pear/Spreadsheet/Excel/Writer/Workbook.php文件的function &addWorksheet($name = ”)函数,第318行加上$name = iconv(“utf-8″, “gb2312″, $name);
广告投放问题剖析
March 7th, 2010 by pinson 2 comments »本文英文原文地址:http://www.openxtips.com/2009/06/tip-14-troubleshooting-banner-delivery/
对于新的OpenX用户来说,对于广告投放出现的各种问题会很头大。即使是对于有经验的OpenX用户,也时不时会在广告投放上遇到一些困难。
您也知道,OpenX广告没有投放出来的原因有很多,很难有一个简单的方案能解决这个问题。幸运的是确认问题在哪的过程不是太难,下面我们一起来看下如何找到广告投放问题的Check List:
#1.0: 是否有广告在投放?
OpenX服务器是否可以投放广告(即使这些广告不是您想要的),或者说完全没有广告在投放?如果有广告可以投放,前往#2.0,如果确认没有广告在投放,前往#1.1。
#1.1: 您正在使用的是直接选择么?
如果您正尝试使用OpenX的直接选择方式投放广告,而非使用广告代码,那么请先尝试通过广告位投放广告。直接选择投放方式是一个非常复杂的过程,主要是针对OpenX的高级用户。如果您的广告不能正常投放,有可能只是因为您还不是一个高级的用户。所以,请先尝试使用广告代码进行投放。
#1.2: 您试过重新生成广告代码么?
有时候,广告不能投放的原因是一个简单的复制粘贴错误。尝试重新生成广告代码,并且复制粘贴到您的网站,看看有没有用。
如果还是不行,尝试将广告代码放到一个简单的无内容HTML页面。有可能是您页面的内容和广告代码之间有冲突。将广告代码放到一个简单的HTML页面可以保证不是页面内容与代码冲突的问题。
#1.3: 您尝试过使用别的广告代码么?
有可能是您选择的广告代码本身有问题,或者只是因为您所选择的广告代码不适合投放对应的广告类型,举个例子来说,图片广告代码只能显示图片广告,而HTML广告是不能在此类图片广告代码上线时的。
尝试别的广告代码类型,看看是不是有用。一般来说,Javascript代码适用于任何广告类型。
#1.4: 您确认广告位上有对应展示概率高于0%的有效广告么?
检查广告位显示概率界面,确认广告位有对应展示概率高于0%的有效广告。如果没有这种广告,您需要链接一些有效广告到广告位上,就可以看到广告了。
另外,如果您使用广告位链来投放另外一个广告位上的广告,尝试重新生成另外的广告位的广告代码并直接使用,看看是否有用。可能您的广告位链并没有设置好。
#1.5: 确认广告位上有可用的广告投放么?
根据实际经验,广告位上不显示广告,实际上是由于广告已经投放完了。举例来说,广告位上连接的所有广告都设置了一天显示一次,然后所有的广告都被显示过,于是乎对应的广告位就没有广告可以显示了。
由于有很多可能的投放限制或者频次限制导致广告无法显示,确认在广告位上有对应至少一个肯定可以投放的广告,来确认这个广告是否可以显示,而其他广告都不行。
#1.6: 您运行了广告屏蔽工具么?
广告屏蔽工具(类似Adblock Plus)会阻止广告展现。如果您正在运行此类工具,尝试禁止功能看看是不是可以看到广告。
#1.7: 确认广告代码服务器调用问题
如果上面所有步骤都试过后都没有用,那很有可能是广告代码在服务器调用的时候出了问题。为了找到问题在哪,您需要一步步的查看服务器调用过程。
举一个简单的例子,用一个简单的HTML页面,页面里没有任何内容,只有一个简单的OpenX Javascript代码,运行这个页面:假设OpenX服务器运行在”www.example.com”域名下。
<html>
<head>
<title>Text OpenX Page</title>
</head>
<body>
<!--/* OpenX Javascript Tag v2.8.0 */-->
<script type='text/javascript'><!--//<![CDATA[
var m3_u = (location.protocol=='https:'?'https://www.example.com/openx/www/delivery/ajs.php':'http://www.example.com/openx/www/delivery/ajs.php');
var m3_r = Math.floor(Math.random()*99999999999);
if (!document.MAX_used) document.MAX_used = ',';
document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
document.write ("?zoneid=1");
document.write ('&cb=' + m3_r);
if (document.MAX_used != ',') document.write ("&exclude=" + document.MAX_used);
document.write (document.charset ? '&charset='+document.charset : (document.characterSet ? '&charset='+document.characterSet : ''));
document.write ("&loc=" + escape(window.location));
if (document.referrer) document.write ("&referer=" + escape(document.referrer));
if (document.context) document.write ("&context=" + escape(document.context));
if (document.mmm_fo) document.write ("&mmm_fo=1");
document.write ("'><\/scr"+"ipt>");
//]]>--></script>
</body>
</html>
当用户浏览器运行这个页面代码时,会从您的OpenX服务器上调用多个不同的URL。您可以通过工具(类似IE下的iehttpheaders或者Firefox下的LiveHTTPHeaders)看到这些URL调用。下面是当页面运行时被调用的URL:
- http://www.example.com/openx/www/delivery/ajs.php?zoneid=1&cb=15028591281&charset=UTF-8&loc=http%3A//www.example.com/test.html
- http://www.example.com/openx/www/delivery/ai.php?filename=468×60.gif&contenttype=gif
- http://www.example.com/openx/www/delivery/lg.php?bannerid=2&campaignid=1&zoneid=1&loc=http%3A%2F%2Fwww.example.com%2Ftest.html&cb=0c9f6849c2
您可以看到,第一个URL是用来获取显示广告的代码,第二个URL用来获取实际的广告图片,第三个URL用来调用1×1 .gif图片以记录广告展现PV。为了找到为什么广告显示不出来,第一个URL是最重要的,因为它是用来调用显示广告的代码。
将第一个URL通过浏览器打开,将会返回下面的结果:
var OX_cacd23fb = ''; OX_cacd23fb += "<"+"a href=\'http://www.example.com/openx/www/delivery/ck.php?oaparams=2__bannerid=2__zoneid=1__cb=b5fcef6ca8__oadest=http%3A%2F%2Fwww.openxtips.com%2F\' target=\'_blank\'><"+"img src=\'http://www.example.com/openx/www/delivery/ai.php?filename=468x60.gif&contenttype=gif\' width=\'468\' height=\'60\' alt=\'\' title=\'\' border=\'0\' /><"+"/a><"+"div id=\'beacon_b5fcef6ca8\' style=\'position: absolute; left: 0px; top: 0px; visibility: hidden;\'><"+"img src=\'http://www.example.com/openx/www/delivery/lg.php?bannerid=2&campaignid=1&zoneid=1&loc=http%3A%2F%2Fwww.example.com%2Ftest.html&cb=b5fcef6ca8\' width=\'0\' height=\'0\' alt=\'\' style=\'width: 0px; height: 0px;\' /><"+"/div>\n"; document.write(OX_cacd23fb);
这个是用来显示广告HTML内容的Javascript代码。
很显然,上面的示例和您的实际情况是不一样的,因为您不会使用“www.example.com”域名,可能您会将OpenX安装到不同的路径,也可能您用的不是Javascript代码。无论如何,基础的过程都是一样的,在包含广告代码的页面运行时,您看到的第一个URL调用应该就是用来产生广告内容的。
如果您发现本次调用并没有任何广告内容出现,那么很有可能是您的广告服务器安装出了些问题导致广告不能正常显示。可以通过下面的步骤来定位问题。
#1.7.1: 检查Web服务器日志
查看您的Web服务器日志,尝试找到用来返回广告内容的URL地址。如果这些URL被调用时出现了错误,将会在错误日志里有所记录。通过日志可以帮您找到为什么调用出错。最常见的调用错误原因是:
- 文件或者目录的权限问题,没有权限调用OpenX下“var/cache”目录下的Cache文件或者没有权限运行OpenX下的某些代码。
- 数据服务器出错导致无法读取必须的广告信息(举例来说,数据库服务器没有运行,数据库有错误数据或错误表,数据库的用户名密码或者权限被修改过等等)
#1.7.2: 打开调试状态
如果上面的Web服务器日志仍然不能帮助您找到为什么广告内容无法返回,您需要尝试打开系统调试状态以帮助您找到更多的信息。无论如何,在做这件事情前一定要小心,因为所有的错误信息都会在生产系统上时时显示。所以,这个是最后一招。
要想打开系统调试状态,编辑OpenX配置文件,按下面的说明修改:
[debug] production=1
将production值设为0(或者”false”)。
同时,您可能需要修改PHP设置以显示错误信息。
上面这些操作只能让您看到一些错误信息,这些可能会帮助您找到错误并修改错误。如果实在没有办法修复,可以给OpenX的开发团队提交Bug。
#2.0: 有广告显示,但不是想要的广告
有时候,广告可以显示,但是显示的不是应该出现的广告。举例来说,可能会出现下面几种状况:
- 所有您看到的广告都不是您认为应该看到的;
- 有些广告您认为应该看到的,但是从来都没有看到;
- 广告显示的次数和您的期望不一样。
上面说的集中情况,下面这些步骤可能可以帮助您。
#2.1: 您使用的是正确的广告代码么?
一般来说,您看到的广告都不对的话都是因为使用的广告代码错了,经常都是在复制粘贴过程中弄错了。
尝试重新直接生成广告代码,并重新放到网站需要的位置。
#2.2: 您希望看到的广告看不到,确认其已经生效或者连接到广告位上了么?
重新确认下在广告位显示概率界面上,您期望显示的广告是有效的并且已经连接到您看到的广告位上了。另外重新确认下该广告的显示概率大于0!
#2.3: 您希望看到的广告看不到,是新加的广告或者最近刚刚修改过的么?
OpenX广告服务器使用缓存系统来保证广告投放的效率。因此,对广告的任何修改,包括连接新的广告到广告位上,将不会马上在投放中生效,除非广告缓存时间到了。
如果您希望看到的广告看不到,并且广告是新加的,或者是刚刚连接到广告位上,亦或是修改过,在缓存时间到了后在确认广告是否能够正常显示。
#2.4: 您希望看到的广告看不到,确认该广告设置了目标用户或者频次?
有时候,广告实际上是被投放了,但只是您看不到,可能是因为您设置了广告投放的目标用户或者频次,导致这些广告只能被其他特定用户看到。
使用广告位显示概率界面快速的查看下广告是否设置了目标用户或者频次,如果设置了,看下这些设置是否正确。您也可以查看下报表确认您看不到的广告是否被投放了。
#2.5: 您运行的是第三方的广告联盟广告么?
有时候,您可能在您的网站上看到了不应该出现的广告。常见的原因是因为您正在展示第三方的广告联盟广告,而第三方广告提供了新的广告主,亦或是提供了以前没有使用过的新广告格式。
尝试使用工具(类似IE下的iehttpheaders或者Firefox下的LiveHTTPHeaders)查看广告点击时的URL调用。这些可以帮您确认是哪个广告联盟在显示这些不期望展示的广告。
#2.6: 您在运行OpenX的Market么?
在OpenX 2.8版本,OpenX Market为网站主提供了为广告项目设置基础价格的功能,当某个OpenX Market里面的广告主希望付高于这个价格的钱来买这个广告展示的时候,OpenX Market将会代替原有广告项目的广告而显示这个广告主的广告。
虽然这个对于使用OpenX的发布商是一个好的消息,因为这是一种无风险的提升收入的方式。但同时也意味着任何时候,只要有OpenX Market的广告主愿意付更多的钱购买当前的广告展示,那所谓的“意外”广告就会被显示。
如果您发现当前显示的“意外”广告不是来自于第三方广告联盟,检查下广告项目,确认您是否打开了OpenX Market。这些可能是为什么您看到了“意外”广告的原因(令人高兴的赚钱广告!)。
理解请求(Request)和展示(Impression)的区别
March 2nd, 2010 by pinson 1 comment »英文原文地址:http://www.openxtips.com/2009/05/tip-13-understand-the-difference-between-requests-and-impressions/
如果您看过理解OpenX的广告投放逻辑,那么您可能会注意到当广告投放的时候,会有两个数据被记录,一个是请求(Request),另一个是展示PV(Impression)。1.
理解请求和展示PV之间的区别是非常重要的,一旦理解了,可以帮您对于OpenX广告投放性能有更深入的理解。
在OpenX数据库里请求和PV展示的数据结构
在深入到请求和PV展示的区别之前,需要了解到请求数和PV展示数记录在哪里。
如果您运行的是OpenX 2.4或者OpenX 2.6版本,那么请求数记录在”data_raw_ad_request”表2中,而对应的PV展示数则记录在”data_raw_ad_impression”表中。
如果您运行的是OpenX 2.8,那么请求数记录在”data_bkt_r”表中,而对应的PV展示数则记录在”data_bkt_m”表中。
如果您从来没有看过这些数据表,您可以尝试登录到OpenX数据库中,简单的看下这些数据表。但是请一定要小心,这些表特别是在早期的OpenX 2.4和OpenX 2.6版本可能会非常的大,所以在运行SQL命令的时候可能会占用很长的时间,而且也会影响到您服务器的性能。所以,在查看这些表的时候最好限制下查看的行数,您可以使用下面这些命令进行查看:3:
OpenX 2.4 & OpenX 2.6
SELECT * FROM data_raw_ad_request ORDER BY date_time DESC LIMIT 20;
SELECT * FROM data_raw_ad_impression ORDER BY date_time DESC LIMIT 20;
OpenX 2.8
SELECT * FROM data_bkt_r ORDER BY interval_start DESC LIMIT 20;
SELECT * FROM data_bkt_m ORDER BY interval_start DESC LIMIT 20;
运行上面这些命令后,您应该可以看到记录的请求和PV展示数据。
如果您没有看到任何请求和PV展示数据,确认下近期是否投放过任何广告?尝试投放一些广告,然后再看看是否能看到请求数和PV展示数被记录。
如果您看到有PV展示数据,但是没有请求数据,并且您运行的是OpenX 2.4或者OpenX 2.6版本,您需要确认下是否允许记录请求数?检查下面的设置:
- OpenX 2.4:使用管理员帐号登录进入OpenX,进入设置,主设置,统计和维护设置,确认“记录每次广告请求”是否打开。
- OpenX 2.6:以管理员身份4进入界面,进入帐号设置,全局设置,广告记录设置,确认“记录每次广告请求”是否打开。
请注意,作为OpenX 2.4和OpenX 2.6版本是没有使用OpenX 2.8版本中更新更快的日志记录系统的,打开请求数记录意味着在服务器上增加了新的负载。在打开这个设置之前要考虑清楚,一定要密切监控OpenX服务器以确保服务器性能。
在OpenX用户界面上请求数和PV展示数的显示
现在您已经在数据库里见到了请求和PV展示的数据,并且确认这些数据被记录,那么才可以保证在OpenX用户界面里面看到这些数据。默认情况是PV展示数据可以在OpenX用户界面上显示出来,但是请求数则不可见。要想在用户界面看到这些请求数据:
- OpenX 2.4:使用管理员帐号登录OpenX,进入设置,朱设置,界面默认。在这里您可以找到用户界面里可以显示的各种统计界面的字段列表。您可以在统计报表的界面中看到请求数,如果您希望显示请求数数据,选择“显示请求数列”即可
- OpenX 2.6:以管理员身份5进入界面,进入我的帐号,帐号设置,用户界面设置。这里可以找到用户界面里可以显示的各种统计报表界面的字段列表。您可以在统计报表的界面中看到请求数,如果您希望显示请求数,选择“请求数”即可。您也可以更换各列的显示顺序。
- OpenX 2.8:以管理员身份6进入界面,进入我的帐号,设置,用户界面设置。这里可以找到用户界面里可以显示的各种统计报表界面的字段列表。您可以在统计报表的界面中看到请求数,如果您希望显示请求数,选择“请求数”即可。您也可以更换各列的显示顺序。
注意:OpenX 2.4可以针对不同的帐号类型设置可以显示的列,而这些功能在OpenX 2.6和OpenX 2.8里则不可以,对应的是每个账户可以自行设置看到哪些列。上面的说明只是简单的修改了主帐号的设置,而其他所有帐号将默认继承主帐号的设置。
那不同的地方在哪里?为什么我们要关心?
如果您好好的看过理解OpenX的广告投放逻辑,您会发现一旦OpenX服务器决定哪个广告要被展现马上就会记录请求。而PV展示则直到广告被实际展现后才会记录。7
您会发现,如果您记录了请求数和PV展示数,并且在用户界面里都有显示,作为简单的原则来讲,请求数应该是大于PV展示数的。请求数和PV展示数据的差异主要源自于“丢失率”,高丢失率主要会产生两个影响:
- 如果您的OpenX服务器只是一直在选择广告但是却不显示,那么您的服务器所作的工作意义不大,从而服务器的性能低于其应该有的能力,而这只会浪费钱。
- 如果用户在浏览您的网站并请求广告,但是广告却没有被显示出来,那就意味着您在损失收入。无论您的项目是以CPM,CPC或者CPA的计费模式,如果广告没有被显示出来,您也不会产生收入。
那么,什么是高丢失率?在行业里面并没有定义这样的标准。据经验来看,10%是比较能够接受的,当然这个数值越低越好。
怎样解决丢失率不好的问题?
这个问题,是个很大的问题。在讨论如何解决这个问题之前,需要先明确下为什么广告被挑选出来但是却没有实际显示。下面这些是广告不显示的最重要的几个原因,每个原因后面都对应着相应的解决问题建议:
错误使用了单页面调用代码
单页面调用代码只向OpenX请求一次来获取一个页面上所有广告为对应的广告。默认来说,单页面调用代码会选择该网站下所有的广告位对应的广告。所以,如果在页面上如果只显示几个广告位,那最好在代码使用前预先定义,来避免广告被选择了但却没有别显示出来。
广告文件过大
如果广告文件非常大(例如大的Flash广告等等),那网速比较低的用户可能在广告还没有完全下载下来之前就已经离开了。尽量避免使用非常的尺寸的广告,当然如果必须投放,可以考虑购买 MaxMind网速地址库来针对告诉网站用户投放大尺寸广告,对应的低网速用户则显示小尺寸广告。
第三方广告速度较慢
大部分的OpenX用户通过广告联盟来获得主要的收入,广告联盟提供一个HTML代码来展示广告。现实状况是一些第三方的服务器并不如期望的速度快。最简单的办法是通过报表监控广告的丢失率,来判断是哪个广告联盟影响了丢失率。如果找到了,考虑他们产生的收入水平,如果这些并非收入的主要来源,可以考虑不要投放这些联盟广告可能会为您的网站带来更多的收入。
网站速度慢以及不好的广告位置
如果您的网站本身速度较慢,而且广告文件较大,用户可能在页面还没有完全下载之前就已经离开了。在这种情况下,放在页面底部的广告可能没有机会完成下载用户就已经离开了。建议可以升级您的网站服务器来保证网站速度提升,对应的需要重新考虑下网站页面的设计和广告的位置。
- OpenX 2.8默认会记录请求数和PV展示数,而OpenX 2.6和2.4版本,请求数记录是选择性的,默认是不选的。 [↩]
- 如果请求数记录被打开[↩]
- 如果您的OpenX安装时使用了数据库表前缀,这些命令可能需要修改。例如,“phpads_”,“oa_”,“ox_”等等。 [↩]
- 您需要使用管理员帐号登录OpenX。[↩]
- 同上,您需要使用管理员帐号登录OpenX。[↩]
- 同上,您需要使用管理员帐号登录OpenX。[↩]
- 只有一种例外情况,请求数和PV展示数会同时记录,在理解OpenX的广告投放逻辑里面提到过,就是通过图片,无Cookie图片或者XML-RPC广告代码投放广告。因为这些广告代码不支持通过标记记录PV。[↩]
理解OpenX的广告投放逻辑
March 1st, 2010 by pinson 1 comment »英文原文地址:http://www.openxtips.com/2009/04/tip-8-understand-the-banner-delivery-process/
广告调用过程中到底发生了什么?为什么我需要知道?这个问题很简单,虽然描述这个过程显得有些技术化,但是理解广告投放逻过程对于抓住广告投放逻辑至关重要,而且这个问题是理解其他OpenX主题的基础。
虽然下面描述的步骤主要针对OpenX2.8版本,但其步骤和早期版本差不多,只是以前的版本效率低一些而已。无论如何,基本的理念是一致的。
广告投放步骤
无论您使用何种广告代码,广告投放步骤都是一样的。经过一些环境初始化后,广告服务器使用下面的步骤来决定投放哪一个广告。
- 找到所有连接到该广告位的有效广告1。
- 是否有Contract(Exclusive)项目下的有效广告?如果有,则进入下面的步骤:
- 如果当前点达到后,就不会有Contract(Exclusive)项目下的广告展现。
- 是否有Contract项目下的有效广告?如果有,进入下面的步骤:
- 是否有Contract项目下的广告超过了投放限制?如果有,抛弃掉这些广告。
- 是否有Contract项目下的广告和当前代码不相容?如果有,抛弃掉这些广告。
- 还有广告剩下么?如果有,进入下面的步骤:
- 随机Possibly 通过Contract项目广告投放步骤在这些广告中选择一个广告。(查看详情).
- 如果If 有广告被选择了:
- 使用所选广告ID和广告位ID记录一次请求。
- 显示广告。
- 使用所选广告ID和广告位ID记录一个PV日志。
- 如果当前点达到,就不会有Contract(Exclusive)项目下的广告可以展示,并且Contract项目下的广告也不会被展示。
- 是否有抄底项目下的有效广告?如果有,进入下面的步骤:
- 是否有抄底项目下的广告超过了投放限制?如果有,抛弃掉这些广告。
- 是否有抄底项目下的广告和当前代码不相容?如果有,抛弃掉这些广告。
- 还有广告剩下么?如果有,进入下面的步骤:
- 通过项目权重/广告权重步骤选择一个广告。(下面有详细说明)
- 使用所选广告ID和广告位ID记录一次请求。
- 显示广告。
- 使用所选广告ID和广告位ID记录一个PV日志。
- 如果当前点达到,则不会有Contract(Exclusive)项目下的广告可以展示,并且Contract项目下的广告也不会被展示,另外抄底项目下的广告也不会被展示。
- 当前广告为是否通过广告位链连接到其他广告位?如果是,则按照第一步以新广告位重新执行。
- 如果当前点达到,则不会有Contract(Exclusive)项目下的广告可以展示,并且Contract项目下的广告也不会被展示,另外抄底项目下的广告也不会被展示,而且该广告为没有通过广告位链连接到其他广告为。
- 是否设置了默认广告?如果有,进入下面的步骤:
- 使用所选广告ID和广告位ID记录一次请求。
- 显示广告。
- 使用所选广告ID和广告位ID记录一个PV日志。
- 如果当前点达到,则没有广告可以展现。
- 展示一个1×1的空白广告。
项目权重/广告权重处理步骤
在上述步骤中,当测试Contract(Exclusive)项目下的有效广告或者测试抄底项目下的有效广告时,如果有超过一个广告可以投放,则按照以下步骤来决定投放哪一个广告,不同的版本步骤会稍有不同:
OpenX 2.8.1以后版本
- 在广告位对应的所有广告里,找到其所属项目。
- 加和所有项目的权重。
- 在0和所有项目加和权重区间生成一个随机数,通过这个随机数来选择一个项目。
- 针对所选项目下所有适合的广告,加和所有广告的权重。
- 在0和所有广告加和权重区间生成一个随机数,通过这个随机数来选择一个广告。
OpenX 2.8.0以前版本
- 针对所有广告位对应的广告,把每个广告的权重权重乘以对应的项目权重,获得一个总体广告/项目权重值。
- 加和所有广告的总体权重值。
- 将每个广告的总体权重值除以所有广告的总体权重值。(此步骤保证每个总体权重值加和后值为1)
- 在0和1之间生成一个随机数,通过这个随机数来选择一个广告,所以广告是基于项目/广告权重来进行分配投放的。
Contract项目广告选择步骤
在上述步骤中,在测试Contract项目下的广告投放时,如果有超过一个广告可以被投放,可以通过下面的步骤来决定投放哪一个广告:
- 在有效广告中查找优先级为10的Contract项目(如果有):
- 如果没有广告被选择,则针对Contract项目优先级为9,8,然后7的所有广告重复上面的步骤。直到对应的Contract项目优先级为1。
PV日志记录顺序
特殊广告代码(图片,无Cookie图片,XML-RPC)在展示广告后不记录PV日志,而对应的在记录请求的时候就被记录的PV日志。这就意味着,在展示广告之前,就已经记录了PV日志。这是因为这些广告代码,不适合投放PV日志记录的标记。6
- 一个有效的广告是指所属项目正在运行,而且该广告没有被禁止使用。[↩]
- 这个意味着,该广告实际上试图被投放出来,但是可能由于所设置的投放限制或者投放策略问题而没有被显示。 [↩]
- 举个例子,HTML广告在使用图片或者无Cookie图片广告代码时就不能显示出来。因为那些广告代码只能投放图片广告。 [↩]
- 这些值来自于Maintenance Prioritization Engine. [↩]
- 如果Maintenance Prioritization Engine决定Contract项目不用使用所有可用流量来满足项目需求的时候,则可能加和的新优先级参数值小于1。[↩]
- 日志记录标记其实是一个单独投放的1×1 .gif像素图片,当然如果一个广告没有真正的投放的用户看到的网页上,则对应的广告PV不会记录。[↩]
基于Nginx, lighttpd/apache上的OpenX高性能集群配置手册
February 21st, 2010 by pinson 2 comments »本文英文原文地址:http://www.sherin.co.in/openxcluster121/
编者注:本文非常详细的描述了OpenX集群的配置方法,对于想通过OpenX做大规模服务的应用来说应该有比较大的帮助。原文是英文的,为了保证意思的表达就不翻译成中文了。
1. Introduction
2. System Requirements
2.1 Load Balancer Node
2.2 Web Servers Node
2.3 Database Server Node
3. Install and Configure Load Balancer
4. Install and Configure Webserver
4.1 File system configuration
4.2 Lighttpd installation
4.3 Apache installation
5. Install and Configure Database Server
6. Optimization
Appendix-A About The Author
Appendix-B License
1. Introduction
This document help you to setup a simple cluster for starters. This configuration using the best and popular software configuration for getting better stability and performance. This can be used for Openx cluster platforms and large vbulletin forums. Please not this is not a high availability solution but cluster. You can build this cluster with a minimum of 4 servers.
1.1 Why the name 121 Cluster?
Let me explain 1-2-1 cluster means ,
- 1 – Load balancer
- 2 – Werbserver , or multiple of 2
- 1 – Database server
So this configuration is based on one load balancer , two or multiple of 2′s of webservers and one database server. Here all are servers there is no need to buy external devices. This is the simplest and well optimized cluster that you can build. You can see a graphical representation of this cluster as below,

1.2 Technology
We are here using Nginx webserver as http load balanced Proxy. It is the most popular proxy application and around 6% of high traffic websites in this world usin nginx. Some example sites using nginx are wordpress.com ,rambler.ru,fastmail.fm
Behind these proxies we use lighttpd as webservers for hosting our application. Lighttpd is a fast webserver with light foot print. It can simply handle millions of requests without increasing server load.It is designed and optimized for high performance environments. With a small memory footprint compared to other web-servers, effective management of the cpu-load, and advanced feature set (FastCGI, SCGI, Auth, Output-Compression, URL-Rewriting and many more) lighttpd is the perfect solution for every server that is suffering load problems.
2. System Requirements
Here we using the best webservers and proxy applications available on industry. It is fully a service based cluster. So no worry about kernel panics and OS corruptions. Also if you have a private LAN across these nodes, it is good to configure it otherwise you need to proxify the access over internet.
2.1 Load Balancer Node
This node is your public node,, That means your Openx/website domain is pointing to this server IP. I recommend to install ubuntu server Operating system/ Centos for your load balanced server. Here in this article I am mentioning the procedure based on ubuntu.
2.2 Web Servers Node
You may need a minimum of two webservers or multiple of 2, beacuse I am configuring GlusterFS between these webservers for file sharing. GlusterFS is one of the top cluster file system which is built on ext3. With 4 webservers you can configure a RAID10 like GlusterFs file system. That mean your cluster will work if 50% of node go down. It have automatic mirroring and scaling capacity. So there is no need to sync your website / openx contents regularly.
You can chose centos/ubuntu Os as operating system in webserver nodes. If you going to install cPanel then you can only use apache as webservers. Also remember the webservers must need same type of hardware configurations.
2.3 Database Server Node
As it is a single cluster we only use one database sever for Mysql. I recommend to use a bigger configuration of for this server as follows,
- Processor -Dual Quad core AMD/ Xeon
- RAM – 12 GB
- HDD – SAS RAID 10
Again Use Centos as operating system in this server
3. Install and Configure Load Balancer
Please see the picture , the top one is load balance. Let us use the same IP as in this example. Download the latest stable version of Nginx from here .I used nginx-0.7.62.tar.gz . Please proceed as follows.
# wget -c http://sysoev.ru/nginx/nginx-0.7.62.tar.gz # tar -xzf nginx-0.7.62.tar.gz # cd nginx-0.7.62/ # ./configure --prefix=/opt/nginx # make # make install
Please resolve the dependencies before make.
Now we installed Nginx here. It is a best webserver eventhough we can use it as load balanced proxy. The Nginx configuration file is /opt/nginx/conf/nginx.conf . Add the following contents to /opt/nginx/conf/nginx.conf
user nobody;
worker_processes 5;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 4096;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
#gzip on;
upstream my_openx_site {
server 10.0.0.11:80 weight=5; # this is your webserver www1
server 10.0.0.12:80 weight=5; # this is your web server www2
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://my_openx_site;
}
}
}
The above configuration have 5 worker processor and can handle 4096 requests per second. If you need more connections increase the limits.
Now add a user and group
# useradd nobody # groupadd nobody
Now give suitable permission for log folders.
# chown -R nobody.nobody /opt/nginx/logs/
Now we need to create a startup script. I have done some modification for the initscript as follows. Remember this is for ubuntu. Please copy the following contents to /etc/init.d/nginx
#! /bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: nginx init.d script for Ubuntu 8.10 and lesser versions.
# Description: nginx init.d script for Ubuntu 8.10 and lesser versions.
### END INIT INFO
#------------------------------------------------------------------------------
# nginx - this script, which starts and stops the nginx daemon for ubuntu.
#
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server. This \
# script will manage the initiation of the \
# server and its process state.
#
# processname: nginx
# config: /opt/nginx/conf/nginx.conf
# pidfile: /opt/nginx/logs/nginx.pid
# Provides: nginx
#
# Notes: nginx init.d script for Ubuntu 8.10 and lesser versions.
Functions
#------------------------------------------------------------------------------
. /lib/lsb/init-functions
#------------------------------------------------------------------------------
# Consts
#------------------------------------------------------------------------------
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/opt/nginx/sbin/nginx
NAME=nginx
DESCRIPTION="Nginx Server..."
PIDSPATH=/opt/nginx/logs
PS=$NAME #the process, which happens to be the NAME
PIDFILE=$NAME.pid #pid file
RUNAS=root #user to run as
SCRIPT_OK=0 #ala error codes
SCRIPT_ERROR=1 #ala error codes
TRUE=1 #boolean
FALSE=0 #boolean
lockfile=/var/lock/subsys/nginx
NGINX_CONF_FILE="/opt/nginx/conf/nginx.conf"
#------------------------------------------------------------------------------
# Simple Tests
#------------------------------------------------------------------------------
#test if nginx is a file and executable
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
#set exit condition
#set -e
#------------------------------------------------------------------------------
# Functions
#------------------------------------------------------------------------------
configtest() {
$DAEMON -t -c $NGINX_CONF_FILE
}
getPSCount() {
return `pgrep -f $PS | wc -l`
}
isRunning(){
pidof_daemon
PID=$?
if [ $PID -gt 0 ]; then
return 1
else
return 0
fi
}
status(){
isRunning
isAlive=$?
if [ "${isAlive}" -eq $TRUE ]; then
echo "$NAME found running with processes: `pidof $PS`"
else
echo "$NAME is NOT running."
fi
}
removePIDFile(){
if [ -f $PIDSPATH/$NAME.pid ]; then
rm $PIDSPATH/$NAME.pid
fi
}
start() {
log_daemon_msg "Starting $DESCRIPTION"
isRunning
isAlive=$?
if [ "${isAlive}" -eq $TRUE ]; then
log_end_msg $SCRIPT_ERROR
else
start-stop-daemon --start --quiet --chuid $RUNAS --pidfile $PIDSPATH/$PIDFILE --exec $DAEMON
chmod 400 $PIDSPATH/$PIDFILE
log_end_msg $SCRIPT_OK
fi
}
stop() {
log_daemon_msg "Stopping $DESCRIPTION"
isRunning
isAlive=$?
if [ "${isAlive}" -eq $TRUE ]; then
start-stop-daemon --stop --quiet --pidfile $PIDSPATH/$PIDFILE
removePIDFile
log_end_msg $SCRIPT_OK
else
log_end_msg $SCRIPT_ERROR
fi
}
reload() {
configtest || return $?
log_daemon_msg "Reloading (via HUP) $DESCRIPTION"
isRunning
if [ $? -eq $TRUE ]; then
`killall -HUP $PS` #to be safe
log_end_msg $SCRIPT_OK
else
log_end_msg $SCRIPT_ERROR
fi
}
terminate() {
log_daemon_msg "Force terminating (via KILL) $DESCRIPTION"
PIDS=`pidof $PS` || true
[ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE`
for i in $PIDS; do
if [ "$i" = "$PIDS2" ]; then
kill $i
removePIDFile
fi
done
log_end_msg $SCRIPT_OK
}
pidof_daemon() {
PIDS=`pidof $PS` || true
[ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE`
for i in $PIDS; do
if [ "$i" = "$PIDS2" ]; then
return 1
fi
done
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|force-reload)
stop
start
;;
reload)
$1
;;
status)
status
;;
configtest)
$1
;;
terminate)
$1
;;
*)
FULLPATH=/etc/init.d/$NAME
echo "Usage: $FULLPATH {start|stop|restart|force-reload|status|configtest|terminate}"
exit 1
;;
esac
exit 0
Now give execute permission to this script
# chmod 755 /etc/init.d/nginx
This is all about Load balancer configuration. You can start the Load balance, before that you may need to build your webservers as described below,
4. Install and Configure Webserver
Now we need to configure our web servers. All request came to Load balancer will be passed to your webserver. You can use lighttpd or apache2.2.x as webserver . I recommend to you lighttpd as webserver , because it can handle very high traffic websites with zero load. Before that we are going to configure gluster fs file system among the webserver. These file system is very scalable and high available.
4.1 File system configuration
If you don’t need a common file system, please skip this step.Let us use the minimal number of webservers for Glusterfs. If you have 4 webservers, it is easy to setup a RAID10 model cluster file system. Here we use two servers.
Download the latest stable version of glusterfs from http://www.gluster.com/ . I here used version glusterfs-2.0.2
# tar -xzf glusterfs-2.0.2.tar.gz # cd glusterfs-2.0.2/ # ./configure # make # make install
Now create the configuration files as follows.
# mkdir /etc/glusterfs/ # touch /etc/glusterfs/glusterfsd.vol
The server itself can act as server and client . The GFS server configuration is /etc/glusterfs/glusterfsd.vol . Now add the following contents to this file.
# file: /etc/glusterfs/glusterfsd.vol volume posix type storage/posix option directory /data # this partition is sharing end-volume volume locks type features/locks subvolumes posix end-volume volume brick type performance/io-threads option thread-count 8 subvolumes locks end-volume volume server type protocol/server option transport-type tcp option auth.addr.brick.allow * subvolumes brick end-volume
Now create the GlusterFS client configuration file /etc/glusterfs/glusterfs-client.vol as follows
# file /etc/glusterfs/glusterfs-client.vol volume remote1 type protocol/client option transport-type tcp option remote-host 10.0.0.11 option remote-subvolume brick end-volume volume remote2 type protocol/client option transport-type tcp option remote-host 10.0.0.12 option remote-subvolume brick end-volume volume distribute type cluster/distribute subvolumes remote1 remote2 end-volume volume writebehind type performance/write-behind option window-size 1MB subvolumes distribute end-volume volume cache type performance/io-cache option cache-size 512MB subvolumes writebehind end-volum
So now we have both client and server configuration for the Glusterfs file system. Here the /data partition is sharing around the webservers. You may need to create same configuration in all webservers.
Now start the glusterfs server
# /etc/init.d/glusterfsd start
Now mount the file system to /home as follows
# glusterfs -f /etc/glusterfs/glusterfs-client.vol /home
Add the above line to rc.local file so during reboot your file system will mount automatically. So now we have a common files system among the webserver nodes.
4.2 Lighttpd installation
Please note either you install lighttpd as webserver or use apache. If you going to chose apache please jump to next step.
Download the lighty from http://www.lighttpd.net/download I used the latest version.
# wget -c http://www.lighttpd.net/download/lighttpd-1.4.23.tar.gz # tar -xzf lighttpd-1.4.23.tar.gz # cd lighttpd-1.4.23/ # ./configure --prefix=/opt/lighttpd --enable-fastcgi --with-openssl # make # make install # mkdir -p /etc/lighttpd/ # cp doc/lighttpd.conf /etc/lighttpd/ # cp doc/rc.lighttpd.redhat /etc/init.d/lighttpd # chmod 755 /etc/init.d/lighttpd
Now edit the init script /etc/init.d/lighttpd and update the following line as given below,
lighttpd="/opt/lighttpd/sbin/lighttpd"
ow we need to configure lighttpd with php. Please install php as fcgi module. It is easy
Download the latest stable php from http://php.net/ and extract it. Now build it as follows,
# /configure --prefix=/usr/local/php5/ \ --with-config-file-path=/usr/local/php5/etc \ --enable-force-cgi-redirect --enable-fastcgi\ --with-gd --with-jpeg-dir=/usr/local --with-zlib \ --with-openssl --with-mysql # make # make install # cp php.ini-dist /usr/local/php5/etc/php.ini
Now edit /etc/lighttpd/lighttpd.conf as follows.
server.modules = (
"mod_access",
"mod_fastcgi",
"mod_proxy",
"mod_scgi",
"mod_simple_vhost",
"mod_evhost",
"mod_accesslog" )
server.document-root = "/home/openx/public_html"
server.errorlog = "/var/log/lighttpd/error.log"
index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm" )
mimetype.assign = (
".pdf" => "application/pdf",
".sig" => "application/pgp-signature",
".spl" => "application/futuresplash",
".class" => "application/octet-stream",
".ps" => "application/postscript",
".torrent" => "application/x-bittorrent",
".dvi" => "application/x-dvi",
".gz" => "application/x-gzip",
".pac" => "application/x-ns-proxy-autoconfig",
".swf" => "application/x-shockwave-flash",
".tar.gz" => "application/x-tgz",
".tgz" => "application/x-tgz",
".tar" => "application/x-tar",
".zip" => "application/zip",
".mp3" => "audio/mpeg",
".m3u" => "audio/x-mpegurl",
".wma" => "audio/x-ms-wma",
".wax" => "audio/x-ms-wax",
".ogg" => "application/ogg",
".wav" => "audio/x-wav",
".gif" => "image/gif",
".jar" => "application/x-java-archive",
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".xbm" => "image/x-xbitmap",
".xpm" => "image/x-xpixmap",
".xwd" => "image/x-xwindowdump",
".css" => "text/css",
".html" => "text/html",
".htm" => "text/html",
".js" => "text/javascript",
".asc" => "text/plain",
".c" => "text/plain",
".cpp" => "text/plain",
".log" => "text/plain",
".conf" => "text/plain",
".text" => "text/plain",
".txt" => "text/plain",
".dtd" => "text/xml",
".xml" => "text/xml",
".mpeg" => "video/mpeg",
".mpg" => "video/mpeg",
".mov" => "video/quicktime",
".qt" => "video/quicktime",
".avi" => "video/x-msvideo",
".asf" => "video/x-ms-asf",
".asx" => "video/x-ms-asf",
".wmv" => "video/x-ms-wmv",
".bz2" => "application/x-bzip",
".tbz" => "application/x-bzip-compressed-tar",
".tar.bz2" => "application/x-bzip-compressed-tar",
"" => "application/octet-stream",
)
accesslog.filename = "/var/log/lighttpd/access.log"
url.access-deny = ( "~", ".inc" )
$HTTP["url"] =~ "\.pdf$" {
server.range-requests = "disable"
}
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/local/php5/bin/php",
"socket" => "/tmp/php.socket",
"max-procs" => 2,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "16",
"PHP_FCGI_MAX_REQUESTS" => "10000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
)))
So the above configuration will handle 10000 requests per children per second. You can adjust the factcgi.server options as you wish. Remember it is good all your webservers have same type configuration.
4.3 Apache installation
if you have cpanel or you are going to use apache2.2.x as webserver, please read my previous article to know how to configure it. Openx Hand Book
5. Install and Configure Database Server
Now you can install your mysql server and configure it.
# yum install mysql-server -y
Edit the my.cnf as follows(Remember it depend on your hardware )
[mysqld] safe-show-database old-passwords = 1 max_connections =2048 max_user_connections = 1024 key_buffer_size = 2048M myisam_sort_buffer_size = 64M join_buffer_size = 1M read_buffer_size = 1M sort_buffer_size = 2M table_cache = 4000 thread_cache_size = 384 wait_timeout = 20 connect_timeout = 10 tmp_table_size = 2048M max_heap_table_size = 512M max_allowed_packet = 64M net_buffer_length = 16384 max_connect_errors = 10 thread_concurrency = 16 concurrent_insert = 2 table_lock_wait_timeout = 30 read_rnd_buffer_size = 786432 bulk_insert_buffer_size = 8M query_cache_limit = 7M query_cache_size = 64M query_cache_type = 1 query_prealloc_size = 262144 query_alloc_block_size = 65536 transaction_alloc_block_size = 8192 transaction_prealloc_size = 4096 max_write_lock_count = 16 long_query_time = 5 skip-name-resolve skip-locking [mysqld_safe] open_files_limit = 8192 [mysqldump] quick max_allowed_packet = 16M [myisamchk] key_buffer = 384M sort_buffer = 384M read_buffer = 256M write_buffer = 256M
Now restart mysql server and create a database as follows
# mysqladmin create openx_db
Now go to mysql command prompt and create a user and password as follows
#mysql>grant all privileges on openx_db.* to 'openx_user'@'%' identified by 'VERYSTRONGPASSWORD';
So now for your openx configuration use host as your mysql serve IP(here 10.0.0.20) and database user and password same as above.
6. Optimization
Now it is time to optimize your servers. Please read my Openx Handbook for optimizations ,
Appendix-A About The Author
My Name : Sherin A
My Web Site : http://www.sherin.co.in/ If you wan’t my designation , you can call me, System Engineer , Security Expert , Software Engineer or a FOSS member.
About me :
1) Founder of vcPanel ( Virtual Private Server Control panel )
2) Founder of FOSS award winner project ffmpegistaller )
3) Founder of FossBlog ( A Free and Open Source Software Blog
My relation with Adds : I am here with adds since 2003. Now providing Openx services for companies US , Canad, UK, Australia, Japan , India ,Germany, Croatia and Russia. Contact Me : All my contacts are available here or send email to me sherinmon[at]gmail[dot]com
Appendix-B License
This article is licensed under Creative Commons Attribution-Noncommercial 2.5 India It means you can share and redistribute it , but give a link back to this original document, because sometimes I will add more tips to this document.
OpenX V2.8.3发布
January 11th, 2010 by pinson No comments »此文英文原文地址:openx-2.8.3#new">http://www.openx.org/docs/2.8/release-notes/openx-2.8.3
Openx V2.8.3 - Openx下载 - (2010-01-11)马上下载
广告投放引擎升级 – 在OpenX2.8.3版本,针对投放引擎做了一系列的修改保证跨合同广告计划的广告能够被合理的分配投放。以上修改能够降低少投和多投的概率。针对维护程序以及投放有了一些重大的改变。
针对竞价的广告计划 – 在OpenX 2.8.3以前的版本,一旦某个竞价广告计划在一个页面上投放中间的一个广告,系统回阻止任何其他的广告计划在此页面上投放,除非该竞价广告能够投满该页面上的所有广告位。在OpenX 2.8.3,已经修复了上面的状况,所以如果一个页面上竞价广告计划无法完全投放,系统将投放其他的广告计划(避免出现空白广告)。
安全更新 - 在OpenX 2.8.3里完善了一些关键的安全更新以降低软件中存在的潜在风险。
解决了一些小问题:邮件广告位、性能、用户界面等。
去除了让任何人作为管理员登录的入口
更详细的信息,请参见:https://developer.openx.org/jira/browse/OX/fixforversion/10910.
OpenX上如何安装插件?
December 31st, 2009 by pinson 1 comment »英文原文地址:http://www.adserverplugins.com/openx/how-to-install-a-plugin-in-openx-ad-server/
在OpenX服务器上安装插件非常简单,只需要按照下面的步骤进行。
系统需求
- 独立的OpenX广告服务器安装。OpenX主机版本不能添加插件。
- OpenX 2.8版本之后才可以添加插件,之前的版本不支持插件。
- 在安装新插件或更新插件之前您需要以系统管理员身份登录。只有管理员才有权限管理插件。
安装新插件步骤
要在OpenX服务器上安装新插件,先检查下系统需求是否满足,然后按照以下步骤进行:
- 使用管理员帐号信息登录。
- 确认您是在使用管理员帐号。如果不是,在右上方有一个选择下拉,选择“使用管理员账户”。
- 在Logo的下方,您将会看到有两个新的标签出现,“配置”和“插件”。
- 点击“插件”标签查看所有已经安装的插件清单。
- 在“安装新插件”下方,点击“浏览…”按钮,选择您准备安装的插件文件。
- 找到您选择的文件后,您将会被带往插件界面。
- 点击“安装”按钮。
- 系统将会检查并安装新的插件。安装过程一般只需几秒钟。有些插件可能需要在数据库里创建单独的表,如果那样的话,可能安装时间会稍微长一点,取决于创建表的数目。
- 一旦插件安装完毕,界面将会刷新,您可以看到新的插件显示在插件清单中。
更新插件步骤
如果您收到了已经安装好的插件的更新版本,下面将说明更新的步骤:
- 使用管理员帐号信息登录。
- 确认您是在使用管理员帐号。如果不是,在右上方有一个选择下拉,选择“使用管理员账户”。
- 在Logo的下方,您将会看到有两个新的标签出现,“配置”和“插件”。
- 点击“插件”标签查看所有已经安装的插件清单。
- 点击您需要更新的插件旁边的“详情”链接。
- 系统将会显示您选择的插件的详情页面,包括版本号、创建日期和作者的相关信息。
- 在“更新插件”下方,点击“浏览…”按钮,选择您准备更新的插件文件。
- 一旦您找到并选择相应的文件后,点击“更新”按钮。
- 系统将会自动更新插件,也包括对上传文件的检查。安装持续时间一般只需要几秒,长短取决于更新量的大小。
- 更新完成后,在界面上将会显示新版的详情信息。
作者注:根据实际安装插件的经验,切记不要修改下载的安装包名,上传安装包的时候,OpenX会自动检查安装包是否可用,中间会用到安装包名,笔者之前就曾因为修改了安装包名而无法安装插件的经历。
图形化统计报表插件更新
December 31st, 2009 by pinson No comments »英文原文地址:http://www.adserverplugins.com/blog/2009/12/openx-statistics-as-graphs-plugin-updated/
新功能
在Beta版本中只提供全局历史表图形化的基础上,新版可以针对OpenX几乎所有的统计图形化:
- 广告主
- 广告项目
- 广告创意
- 网站
- 广告位
图表在所有用户类型下均有效(管理员、客户经理、广告主、媒体所有者)
Every graph has buttons to navigate to the previous and next month, or to go up a level to show the current year’s statistics. Clicking a bar will drill down into the underlying statistics, down to a day graph with an hourly break down.
Graphs will show the actual numbers for every bar and dot by positioning the mouse over them.
Improvements
The graphs are now displayed using the open source product “Open Flash Chart 2“, which comes bundled with the plugin. To speed up the display of the graphs, the initial time frame is always the current month.
图表式报告插件V1.0 - 统计报表图形化插件。安装时注意不要修改安装包的名称,OpenX会按照安装包的名称来检查安装包是否可用。 - (2009-12-31)马上下载