| Profilo di Fwolf温暖的耗子窝BlogElenchi | Guida |
|
26/02/2007 Wordpress插件编写简例
虽然市面上有很多wordpress的插件,但未必能够满足我们那些稍微"变态"一些的需求,所以,参照wp官方的插件编写指南,写下这个简单的说明和小例子,希望对大家有所帮助。 插件编写需要php的基础知识,并且本说明的内容大多只适用于wp1.5以后版本。 插件程序建议放置在wp-content/plugins/目录,如果有多个程序文件的话,可以在这个目录下建立子目录,程序所需的资源文件建议也放在这个目录下,便于更新和管理。 wp插件主要分为两种: 在本例中,我们将建立一个简单的Filter插件,替换wp本来的文章摘要生成功能,把以前手工修改代码实现的内容,用插件来替代。 wp推荐在插件程序中加入这样的文件头,便于wp辨认插件的信息,就像下面这样:
/*
Plugin Name: 插件名称 Plugin URI: http://插件网址 Description: 插件说明 Version: 插件版本 Author: 插件作者 Author URI: http://作者网址 */ 插件的代码风格主要是基于过程方式的,所以要尽力避免函数重名,可以在函数名之前加上自己的名称前缀,也可以把自己的类包含在一个类当中,不过小型插件还不至于复杂到要使用类的程度吧? 函数的编写就是php代码了,注意Filter一定要返回数据,即使没有修改也要返回,不然后续的其他函数就没法干活了。更多的信息可以看官方的插件api。 编写完成之后,函数是不会自动执行的,wp为插件函数的执行提供了一种hook机制,就是在原始的wp程序中,预置了一些hook或者叫挂载点,通过把插件函数挂在这些hook上,就可以被执行,目前wp提供的挂载点一览见 Hooks列表。 针对我编写的函数,是要挂在生成文章摘要的地方,查找了一下Hooks列表,发现和摘要(excerpt)相关的有: default_excerpt 从名称可以看出,default_excerpt是文章的默认摘要,excerpt_edit_pre和excerpt_save_pre是编辑文章是对摘要进行的预处理,get_the_excerpt是取摘要,the_excerpt是返回摘要。我编写的是生成摘要的功能,应该挂在get_the_excerpt或者是the_excerpt上,考虑the_excerpt可能更"底层"一些,挂在这里。 挂载的语法也是一个php函数调用,格式如下:
add_filter('hook_name', 'your_filter', [priority], [accepted_args]);
priority为优先级,默认为10,数字小的会先执行;accepted_args为参数个数,默认值为1,如果插件函数需要多个参数的话需要自行设定。这两个参数在使用默认值的时候都可省略。 基本上有这些就够了,我的插件程序完整代码如下:
/*
Plugin Name: Excerpt Trimmer Plugin URI: http://www.fwolf.com/ Description: 替换wp本身的"摘要"生成功能,用于在列表或者查询页面显示文章部分内 容。 Version: 1.0 Author: Fwolf Author URI: http://www.fwolf.com/ */ function fw_excerpt($text) ……ID) . '">[阅读全文]'); add_filter('the_excerpt', 'fw_excerpt'); 可以看出插件程序也就是由上面介绍的3部分组成:文件头,函数体,挂载声明。 其实就简单插件来讲,最关键的是找对相应的hook,这就要靠经验和摸索了,wp官方文档好像也没有对每个hook作出详细的解释。 现在,把我这个插件程序保存为wp-contents/plugin/excerpt.php,登录wp,进入plugin设置,就能够看到"Excerpt Trimmer"插件了,启用之就大功告成了。我还存了一份在 这里,方便下载。 24/02/2007 blogger无法正常发布文件到blogspot的问题
大概2003、2004年我就注册了blogger帐号,具体时间记不请了,不过我的gmail帐号就是从这里来的,后来有人宣传blogger可以自动发布到sitesled,而blogger还支持邮件发布,反正我的blog内容也会用邮件订阅到自己的邮箱,所以我就在sitesled开了个
分店,一直正常使用。 后来,blogger又搞了个beta,我也去趟了趟混水,不过这次没有用ftp发布,而是直接发布到blogger的blogspot上了,这就形成了第二个分店。 由于自己的blog一直是在独立域名和空间上挂着,所以这些分店偶尔会少个一两篇文章我也不怎么在意,可是当blogger的beta结束之后,blogger改用了google account帐号登录,我的两个分店也都整合到了一个blogger帐户下,不仅邮件发布地址冲突了(已经更正,没事了),我还发现 sitesled的分店就能够正常发布文章,而blogspot分店在beta结束之前没事,beta结束之后就无法正常发布文章了。 逐项进行检查,邮件发布地址没问题而且不冲突、不重复,转发邮件也没有退信,都正常发出去了,问题出在哪儿呢?碰巧 gfans上也有人反映blogger发布的问题,于是乎我把两个分店的设置逐一对比,终于找到了问题所在。 在能够正常发布的sitesled分店设置页面,"格式设定"中的时区和语言都是中文,而无法正常发布的 blogspot分店,"格式设定"中的时区和语言都是英语,所以把他们更改为中文和香港时间东8区,再次发送邮件,果然能够正常在blogspot发布了。 简单猜测一下原因,是不是blogger在生成发布页面的时候,针对用户所设置的语言来生成页面文件,虽然目标文件是utf8格式的,但是文字内容需要经过从邮件中解码、un-base64等计算,再转换为utf8,如果用户语言设置错误的话,在这些转换的过程中会出错,所以文章根本就没有存到blogger当中,更别提后续的发布操作了。 我还联想到,同样是gfans中有人问,google的spreadsheet&docs生成的pdf文件,中文怎么无法显示或者乱码呢?这个的原因应该就简单了,因为在我们伟大祖国的it领域,没有一款免费的中文矢量字库,google显然不会用盗版,安装windows系列服务器也不现实,所以,生成的pdf中自然就没有中文的身影了,这一点和linux下有些应用程序生成的pdf文档中的中文是一样的情况和道理。 web访问:匿名,穿越,加速,缓存,一个都不能少
导火索是我的foxyproxy不好用了,本来不怎么使用tor的,
wikipedia我也不怎么上,可是最近不仅sitesled上不去了,连反spam的
Akismet也上不去,导致spam无法识别,越积越多,只能直接删除了事。edgy中的firefox升级为2.0.0.1,我又把firefox的profile文件夹位置挪动了一下,从那以后foxyproxy
就没有好用过,不是提示莫名其妙的错误,就是丢失配置,连右下角的图标和状态文字都经常消失。foxyproxy的作用也就是在我访问不同网站的时候,判断是否启用tor,原来
说过privoxy也能实现,今天我就小小的研究了一下,并且把相关的匿名web访问、穿越网络屏障、访问缓存及加速串起来,形成一套完整的工具。 我们使用到的工具是privoxy、 tor、squid这三个。 Privoxy是代理转发器,他负责控制那些访问使用代理,使用那个代理。 Privoxy: privoxy的主配置文档为/etc/privoxy/config,修改完不用重启privoxy就能生效,在这个文件中添加内容如下:
forward / .
#forward-socks4a .ip109.com localhost:9050 . #forward-socks4a www.ip109.com localhost:9050 . #forward-socks4a www.ip1?9.com localhost:9050 . forward-socks4a .ip1?9.c*:80 localhost:9050 . privoxy的匹配规则是从大到小的,也就是范围最大的放在前面,范围小规则的放在后面,匹配的时候会从前到后,使用最后有效的规则。所以第一条forward是默认让所有访问都不走代理,后面的forward-socks4a则是定义访问指定网站需要使用代理,并且是转发到socket代理服务器tor那里。forward-socks4a规则中需要经常变更的就是target_pattern了,就像我写的那4行,其实都是可用的,"?"可以用来通配单个字符,"*"可以用来通配任意字符,"."放在pattern两端表示之前或之后还有内容,pattern两端是正常字母就说明前面或者后面没有内容了。注意"http://"不能加,否则匹配不上,但是可以用"hostname:80"或者"hostname:443"等方式替代。如果无法访问非443端口的https网站, 可以在default.action文件中把
-limit-connect \
更改为
+limit-connect{80,443,8443} \
就可以了,这是因为provoxy默认限制了对非443端口的https访问,详细的解释在 这里。 另外privoxy的default.action文件默认设置屏蔽了很多广告什么的,包括google adsense都显示不出来,建议用空文件替代之,并逐步用自己的规则来完善,所以如果只保留上面对https网站的访问规则,default.action就是:
{+limit-connect{80,443,8443}}
/ Tor: Squid: 配置文档为/etc/squid/squid.conf,添加如下配置内容:
# 监听端口地址
http_port 127.0.0.1:3128 # 缓存保存位置,1000为缓存总大小(M),16为一级目录个数,256为二级目录个数 cache_dir ufs /var/spool/squid 1000 16 256 # 只允许从本机访问 http_access allow localhost http_access deny all # 配置privoxy为squid的上级(squid的出口连接) cache_peer localhost parent 8118 7 no-query default visible_hostname localhost # 显示声明8443端口能够访问,不然这个非标准https端口就又没法用了 添加了squid之后,浏览器的代理服务器就不要设置privoxy了,而是要指向Squid:127.0.0.1:3128,这样,我们的web访问会先到squid,如果缓存中没有,再通过privoxy访问外网,并且根据规则使用tor进行匿名加密访问。 现在我们的web访问可以说是无所不能了,并且这三个软件占用系统资源都不多,tor稍微多些,占8.4M内存,privoxy占450+k内存,squid占3.2M内存多,所以对系统的速度影响不大。只是squid服务启停稍微慢一些,不过增加缓存服务器对web访问加速的效果还是很明显的。 一般浏览器的代理设置中,对本机的访问一般都会设置为例外即不使用代理,firefox也是这样,所以对调试本机程序没有什么影响。特殊情况确实需要完全"刷新"页面的,按住"Shift"键再点F5刷新即可,再特殊一点的情况,就把代理更改为privoxy 8118,跳过squid,或者暂时禁用代理就可以了。 另外值得说的是,privoxy和squid都有比较完备的访问控制功能(基于ip或者主机),用来在局域网内架设服务,提供到外网的访问代理服务,是再方便不过的了。什么,sygate、wingate?很久都没有听说过这些名词了,呵呵。 21/02/2007 vncserver找不到字体问题的解决
这个好像也是升级到edgy后出的问题,以前都是好好的,现在启动vncserver后连接不上: VNC viewer version 3.3.7 - built Jul 4 2006 10:04:48 到服务器上一看,端口根本就没有监听,查看vncserver log发现有如下错误: Wed Feb 21 00:25:46 2007 Fatal server error: 查询这里和 这里才知道,是由于vncserver找不到字体所以就退出了。 解决的办法嘛,这里推荐的使用命令"vncserver -fp /usr/share/fonts/X11/misc"启动有些太繁琐了; 这里对/usr/bin/vncserver脚本的修改似乎又麻烦了一些,并且经过我的实验还不成功;而这里推荐的ln目录的方法更不可取了,/usr/share/X11/fonts/misc目录下还有别的文件呢。所以,反正我也要 修改vncserver监听端口,所以干脆再在/usr/bin/vncserver上动个小手脚得了: 在/usr/bin/vncserver大约157行的地方: # Add font path and color database stuff here, e.g.: 我们可以安装这里的例子,定制自己所需要的cmd参数,写在这里,和vncserver -fp …命令的性质是一样的,比如我们加上一行: $cmd .= " -fp /usr/share/fonts/X11/misc/"; 注意是".="而不是"=",还有最后的分号";"不要忘记了,现在再启动vncserver就ok啦。 连接上vncviewer后发现,这次vnc升级之后还是有改进的,我没有修改过xstartup,所以一直使用的是默认的X界面,以前只能打开一个窗口,想多任务的话还不行(图形界面),现在好了,虽然窗口丑陋了一些,但是可以缩为一个图标,还能夠调整大小(虽然不太灵光)、位置,比以前还是有进步的。看右边我的截图,左边那个图标就是毒蛙azureus,颜色没转过来,不太像吧,呵呵。 [Game]经典游戏模拟城市3000
EasyWine真是个好网站,为我们提供了很多linux下的游戏,虽然 前面两个游戏没有安装成功,但这个模拟城市3000 还是比较顺利的,并且安装完成之后,图像、音乐、音效一个都不少,相当完整,所以值得推荐。 首先下载那个iso文件,626M,然后mount,之后运行光盘上的setup.sh安装游戏: sudo mount \[Games\ Linux\]-SimCity-3000.iso /media/cdrom -t iso9660 -o loop 我是安装到了/big2/game/simcity3000目录,安装过程还会提示是否安装动画、数据文件等,如果不安装的话,玩之前可能还需要再次mount这个iso文件。安装完成后运行游戏目录下的sc3u启动游戏,却遭遇如下错误: $ ./sc3u 从这里查到,可能是这个游戏放出来得比较早了(游戏出版也有好几年了),linux内核早就升级了,所以需要下载一个补丁文件修正一下,easywine上也给出了 补丁文件,估计和老外说的这个 sc3u-2.0a-x86.run应该是一样的,7.1M,下载然后在游戏目录下运行即可。另外再对启动文件sc3u调整一下,另外编写一个文件sc3u_fixed,内容如下: #! /bin/bash 加上x权限,使用这个脚本启动游戏。主要是设置当前系统的内核版本,这样游戏才能找到适当的库文件。不过这些都做完之后,还有可能会遇到另外一个错误: $ ./sc3u_fixed 要解决这最后一个问题,首先确保libg++2.8.1.3-glibc2.2 libstdc++2.10-glibc2.2这两个包都正常安装了,然后下载loki的游戏兼容性补丁包 (参见这里的讨论),把补丁包解压缩,比如我是解压到/big2/game/lib/Loki_Compat目录了,然后对刚才那个sc3u_fixed脚本文件进行调整: #!/bin/bash 现在,就可以正常启动游戏了,甚至连片头动画都是完整的,速度嘛,感觉比以前在windows下玩还要快很多。不过如果你无法调整分辨率的话,试试把$HOME/.loki的owner调整为你自己,因为如果是使用root安装的游戏,这个目录对普通用户是不可读的,chown一下就可以正常保存游戏设置了。 20/02/2007 Azureus崩溃的解决+2个网站推荐
过年当然要多下点电影看咯,可是Azureus不争气,开了一晚上电脑下电影,早上起来却发现azureus早罢工了,不仅如此,想再次打开也不行!启动之后,就闪一下主界面,就没了,手快的话能够把屏幕截下来,正在下载的种子还都在,系统为ubuntu 6.10 edgy,azureus
2.5.0.0。 找到错误信息上网查了查,有说需要升级libstdc++5的,有说需要从azureus网站直接下载jar文件覆盖现有文件的,还有更改环境变量的,不过这些方法感觉都比较悬,有些根本没用,最有有个人出了个招,把$HOME/.azureus/logs下面的文件都删除,就可以了。我试过,还真行,logs目录下只有一些.log文件,不过删除之后azureus确实能够启动正常使用了,并且和全部删除$HOME/.azureus目录的方法相比,用户设置还能够完整得保留下来。 顺便再推荐2个网站: http://paste.lisp.org/,专门贴代码片段的网站,无需注册便可使用,主要想法是解决在irc讨论中,代码贴到irc频道里面观看不方便的问题,不过由于出身lisp族群,代码显示主要倾向于c, python, lisp, java等。另外对中文的支持也不行,看 我贴的这个vimrc,不仅没有vi那样的语法高亮,连中文都显示不出来。 http://545at.com/htm/jseasy.htm,国人作的一个ajax开源库, 论坛使用的是google groups,看了看在线演示,效果还是不错的,也很实用,小伙儿长得也挺帅:) [Game]安装automanic&lincity(失败)
从EasyWine上看到的这个游戏,觉得和我以前玩的暴力赛车(tdr2000,现在还珍藏着呢,撞车就赚钱,把人家的车都撞坏了就胜利,特过瘾;还有一个更早的,可惜名字实在是忘记了,也找不到安装盘了,主角有两辆车可选,车子正中间都有一道类似嬉皮士头发的"锯齿",当然也可以换用其他车,鼠标是一只断掉了滴着鲜血的手!)有点类似,所以下下来体验一下。
automanic下载后,压缩包中既有源码也有二进制文件,直接运行的话,提示缺包,先是提示缺少libCgGL.so, libCg.so,这个可以从 nvidia官网下载,解压缩后,选择对应的架构,把同名文件ln到/usr/lib即可;然后又提示缺少libode.so,安装源中的libode0c2,然后把libode.so.0 ln为/usr/lib/libode.so;再提示缺少libcal3d.so.11,安装源中的libcal3d11c2a即可。 然后就是个大牌了,提示缺少Crystal Space,于是安装crystalspace相关的包: aptitude install crystalspace (同时会装上libalut0 libmikmod2) 但是游戏仍然无法运行,没办法,用源码手工编译好了: ./configure … 看来还缺少cel,大概也是crystalspace项目的一部分,而cel也没有提供二进制文件,源中也没有,所以需要手工编译,从这里下载下来 源文件包,解压缩然后./configure & make & make install。 也可以使用jam安装,crystalspace3d官方文档推荐使用jam,效果是一样的。可是安装完成之后,运行测试程序walktest却出错: $ walktest 关于这个错误信息,这里倒是有个小讨论,解决方法,是安装mesa-dev,而我发现ubuntu中只有libgl1-mesa-dev和libglu1-mesa-dev,所以装上试试,同时还会安装上mesa-common-dev,安装完之后重新编译。。。重新编译以后,错误居然更多了: $ walktest 看来问题没有解决,还是把那三个包删除了吧。再回过头看看crystal space所依赖的外部包,逐一检查是否安装正常,问题也许就出在这里。 zlib - zlib1g, zlib1g-dev都已安装 再检查一下可选包: freetype2 - libfreetype6装上了,libfreetype6-dev没装,装之 。。。上述能装的都装了之后,再./configure,然后查看config.log,结果依然失望: cs_cv_libCg=no 这些明明装上了的包也识别不出来,或许是位置不对什么的问题,在config.log搜索glx也没有结果,以我的水平看来无法解决此问题了,就此打住,没用的东西都删掉,这个游戏我不玩了,清闲一点好好过年! Update: 后来发现,我确实没有安装opengl的library,因为我忘记了凡是手工编译包的情况,都需要安装***-dev包,ev包中含有编译时需要的头文件,不带dev的包都只是二进制文件而已。所以,在安装 lincity的时候就顺利多了,凡是缺少的包我都能装上。不过最终还是没有能安装成功,因为configure之后,需要用jam编译,可我输入jam命令之后,电脑什么都不干,无奈只好再次放弃。下面是一些configure时缺少的包的安装记录: checking for libxml-2.0 >= 2.6.11… Package libxml-2.0 was not found in the pkg-config search path. Perhaps you should add the directory containing `libxml-2.0.pc' to the PKG_CONFIG_PATH environment variable No package 'libxml-
2.0′ found install packages: libglib2.0-dev libglibmm-2.4-dev libsigc++-2.0-dev libxml++2.6-dev libxml++2.6c2a libxml2-dev checking for OpenGL library… no install packages: libgl1-mesa-dev mesa-common-dev checking for sdl-config… no install packages: libaa1-dev libartsc0-dev libasound2-dev libaudio-dev libaudiofile-dev checking for SDL_mixer >= 1.2… not found install packages: libogg-dev libsdl-mixer1.2-dev libsmpeg-dev libvorbis-dev checking for SDL_image >= 1.2… not found install packages: libsdl-image1.2-dev libtiff4-dev libtiffxx0c2 checking for SDL_ttf >= 2.0.0… not found install packages: libsdl-ttf2.0-dev checking for SDL_gfx >= 2.0.13… not found install packages: libsdl-gfx1.2-4 libsdl-gfx1.2-dev checking for physfs >= 1.0.0… not found install packages: libphysfs-dev 再后来。。。我从lincity官网上发现,debian和ubuntu等linux下都有现成的二进制包可用,我居然舍近求远。。。猪年不利啊。。。:( 不过已经没有心情再安装了。 17/02/2007 愤怒,无奈,失望
在家中实验好ubuntu edgy之后,开始在公司安装,但是,出乎意料的不顺。 本来公司的线路比家里的要好得多,可连接ubuntu官方给出的国内源一个快的也没有,海缆断之前, 都是直接连us.archive.ubuntu.com的,慢但是稳定,但是升级edgy要下载几百m的东西,我可没那个耐心等,前段时间连台大的源非常快,峰值能上5、6百k,但是今天不行了,经常是一大串错误,刚开始还以为是我抓得太快,对方给禁了,后来发现不对劲,直接web一看,原来是连接被reset了,如果是极个别包还好说,我自己上web抓下来放到apt cache里就得了,后来发现很多包都这样,真是气死我了。 连接被reset,原因虽然不很明确,但作者却不言而喻,大好的技术,作点什么不好,搞这些歪门邪道,再说搞也把质量控制好,不要清白不分! 这位弟兄大概也是遇到了和我一样的问题,巧的是,他的网络线路和地理位置和我一样。 实在没办法了,从这里又找了几个源,现在用着亚特兰大的那个,效果还算可以,一会几十k,一会儿能到几百k,大体还能够接受吧。 网通连不上电信也就算了,中国人连国内,包括台湾省,还不如连国外网络快,真是羞死人了。海缆断的一个多月中,好像就新闻上简单报了报,重点分析的就是一些国外留学申请,甚至还不如前几天vista发布在新闻上露脸的机会多,原来网络在我们这里,连P都不算。 鲁迅还能"横眉冷对"一下,我们连指都不知道该指谁。 12/02/2007 把ubuntu dapper升级到edgy其实早就该升了的,可是我怕不稳定,所以一直憋到现在,不过话说回来,什么LTS支持5年之类的,对普通桌面用户用处应该不大。 由于咱是老实人,所以还是使用官方提供的方法升级吧: gksu "update-manager -c" 可是天不遂人愿那,我用的是cn99的源,firefox 1.5.0.8還是1.5.0.9版本有问题,打开有cookie的网站就挂,所以cn99源中大概删除了这个包,可我想用上面命令更新到edgy,就必须先把本机的包更新到最新版本,可这样只会得到错误: W: Failed to fetch http://ubuntu.cn99.com/ubuntu/pool/main/f/firefox/firefox_1.5.dfsg+1.5.0.8-0ubuntu0.6.06_i386.deb
。。。。 原来我搞错了,可以不升级包的,出现"Software Updates"窗口之后,默认会列出可更新的包,不过如果你是用"update-manager -c"命令调出来的,可以点一下下面的"Check"按钮,更新之后就能看到可更新软件列表上面出现了一行"New distribution release '6.10′ is available - Upgrade",点按钮按提示操作就能够升级到edgy了,不用手工修改源那么麻烦。 。。。。 直接升级太慢了,是从国外的archive.ubuntu.com上直接下载的,我還是手动修改源好了: sudo apt-get update 。。。。 经过漫长的下载与等待,终于完成了,网速慢的同志们升级可一定要用光盘啊,或者在局域网中作个镜像,不然得下载个几天。兴高采烈的重启机器,求神拜佛保佑不要出现问题。。。可还是在启动的时候停住了,硬盘灯一直不亮,用recove模式启动,发现会停留在"waiting for root file system"错误信息,很长时间不动的话,会返回几乎一个什么都干不了的shell,用另外一台电脑上网查到 这里,用livecd启动进去,chroot some_dir /dev/hda,然后apt-get install udev。。。说实话这个地方我真不知道是怎么弄好的,udev也好,ubuntu-mini也好,我都没有敢实际的安装,因为看到随着安装需要删除的东西太多了。也不知鼓捣了什么,再一重启,居然就可以正常启动了,还有一样莫名其妙的就是启动splash没有啦,变成一行行原始英文往上滚了,中间居然还会变一下字体,寒。下次我再升级另外一台机器的时候,安装完就重新install一下udev,应该就不会出问题了吧? 不过好歹是可以启动了,登录以后,重新配置一下X,基本上使用就正常了,感觉读硬盘的效率高了一些;firefox2很好用;bash字体改变了,需要手工再指定为simsun,不然看着发虚眼睛疼;内嵌的文泉驿字体我没用,用惯ms字体了,不过原来给同时安装的使用用过,超赞的;几十个包无法升级,需要手工aptitude install一下,有些涉及到版本树的分支,其中很多都是python2.4的包变更为python的。 edgy还有一个很不习惯的改变,就是在fstab和grub中引入了uuid这个东西,比如升级后的fstab: # /dev/hda1 — converted during upgrade to edgy 不知道uuid这个东东先进在哪里,不过照原来的/dev/hd?相比,直观性差远了,有什么办法调整回去没有? 08/02/2007 用AWStats统计网站访问情况
AWStats是一款强大的日志分析工具,可以从你保存的服务器日志中分析出类似51.la统计的信息,当然,他的功能可不仅仅是web服务器的日志分析,还可以分析其他服务器比如mail服务器的日志呢。 awstats的官方安装说明繁琐了一些,其实没那么复杂的,也就下面几步。我使用的环境为ubuntu linux,apache2。 首先是awstats的安装,ubuntu直接apt就能装上了,也有用源码包或者源代码安装的,不过其实只是一些文件和perl程序而已,不用编译,放到合适的位置就可以了。/usr/share/awstats是一些语言文件、图标文件、库和插件,/etc/awstats下面是配置文件,核心程序awstats.pl放在/usr/lib/cgi-bin目录下,也就是常用的cgi程序目录,并且设置可执行权限。 然后就要对apache进行一番配置了,首先强烈建议把日志类型从默认的common更改为combined,这样日志文件会记录更详细的信息,便于分析:
CustomLog /var/log/apache2/access.log combined
如果服务器有多个虚拟主机的话,一般建议每个虚拟主机的log文件分别存放,不过awstats也能处理混合在一起的log,前提是combined类型log,common类型的log是不行的。iis系列的设定还是参照 官方安装说明吧,我不熟悉。下面来设置apache,配置web访问相关的设置,根据我的环境,apache的conf中添加如下内容即可:
Alias /awstatsicons "/usr/share/awstats/icon"
ScriptAlias /cgi-bin /usr/lib/cgi-bin RewriteRule ^/awstats[/]? /cgi-bin/awstats.pl [R] Options +ExecCGI 加上那句RewriteRule我只是为了访问更方便,以前几乎没有用过cgi程序,习惯http://domain.com/awstats这样的网址了。对apache的更改其实就是cgi运行环境的设定而已。 最后,我们还要针对要统计日志的每个网站,创建配置文档。/etc/awstats/awstats.conf是默认的配置文档模板,里面所有的选项都有详细说明和例子,所以只给出我的一个配置实例(awstats.localhost.conf):
# Basic
# —– # 要分析的log文件地址 # Optinal # Create a lock file when update stats result, not open when no shell priv # Use frame 常用的配置项应该就这么多,稍微重要一点的我都用中文注释上了,注意要确定log文件和储存结果的文件存在并且能够被apache用户www-data访问,配置到这里就基本上结束了,现在打开浏览器,http://localhost/awatats 就可以访问了,当然默认是没有数据的,因为还没有进行分析,如果设置了相应的选项,可以从web页面直接下达更新指令,也可以使用如下命令更新:
perl /usr/lib/cgi-bin/awstats.pl -config=localhost -update
分析完成的结果就可以通过web页面观看了。 在实际应用当中,如果apache日志是不截断的,也就是说所有时间的日志都保存在access.log文件当中,虽然awstats能够自动辨识上次处理的进度,只处理新产生的那一部分日志,但堆一个大文件在这里还是会有些不方便,所以建议把apache日志截断,linux下可以直接把access.log改名,windows下则需要改名并重启apache,不然apache会很聪明的把日志写到改名以后的文件中。这样我们的log文件名中就带有日期了,在conf文件中可以这样指定:
LogFile="/var/log/apache2/access.%YYYY-24%MM-24%DD-24.log"
在这个例子中,我的log文件名类似access.20070206.log的模式,并且把awstats.pl放到cron中,每天都自动处理前一天的日志,所以用"%YYYY-24%MM-24%DD-24"来指定24小时以前日期的年、月、日,只要7号的某个时间执行更新脚本,得到的日期就肯定是6号了。 LogFile理论上还可以识别多个log文件和gz格式的log文件,不过我也不知道怎么写才合适,只有请教过路大侠了。 06/02/2007 创建本地ubuntu mirror(镜像)
前两天成功"欺骗"一位同事安装了个ubuntu dapper,能够得手的原因主要是他忙于在网上看小说,原来的xp被恶意软件、恶意网站和病毒搞垮了,而我为他安装的linux和firefox对这些都基本免疫,所以才能够得手。如果能够再克服activex和msword两个障碍,就可以推广到更大的范围了。 安装很顺利,不过使用的是外置usb光驱启动安装,所以读盘的速度比较慢,下回我会尝试下载一个server版的光盘安装,会快很多,只是安装完要在手工安装desktop包。另外安装完成以后按照" 官方配置指南"配置中文和java等也需要下载一些东西,我这里是网通的线路,官方的源中很少有快的,除了国立台湾大学的。不过这样总不是办法,随着线路情况的变化,这些源的快慢变化不定,还是局域网内有一个稳定的源最为稳妥,所以萌生了mirror一个ubuntu的念头。 作一个镜像也很简单的,只要有一台ubuntu,配置好apache,安装上rsync程序,准备足够的硬盘空间,就可以了,通过rsync编写一个小的脚本,就可以了,脚本如下:
#! /bin/bash
rsync -aPS –delete-after \ –exclude *amd64* –exclude *ia64* \ –exclude *powerpc* –exclude *sparc* \ –exclude *hoary* –exclude *warty* \ –exclude *breezy* \ –exclude *.iso \ –exclude *.orig.tar.gz –exclude *.diff.gz \ –exclude *.dsc \ rsync://archive.ubuntu.com/ubuntu \ /home/ubuntu 这个例子抄自这里,从hiweed传出来的,不过注释有些小错误,更正如下: exclude amd64 ia64 powerpc sparc 是去掉不想要的架构 apache配置虚拟目录就不说了,以后局域网的电脑的source.list就简单了,比如deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ dapper main restricted universe multiverse里面,把网址http://…部分更换成内网服务器地址,比如 http://server/ubuntu/就可以了。 crontab -e把这个脚本放到cron中,每天执行,嘿嘿。
# m h dom mon dow command
0 4 * * * /home/fwolf/rsync_ubuntu.sh 镜像不知道需要花费多少空间,有了结果以后再告诉大家。 03/02/2007 Message rejected for Sector 5 policy reasons
用邮件订阅了一些google groups讨论组,发现有些文章值得保存的话,我会用mail forward转发到自己的另外一个讨论组,这样便于以后查找,可有些邮件在转发的时候会失败,gmail会返回一封"Delivery Status Notification (Failure)"发送失败的邮件,内容如下:
This is an automatically generated Delivery Status Notification
Delivery to the following recipient failed permanently: Technical details of permanent failure: —– Original message —– 退信的原因是"Sector 5",而这个神秘的"Sector 5" google并没有给出详细的内容,哪怕是出处也没有。网上也有很多人遇到了类似的情况,甚至在一些google groups中也有讨论,但都没有结果,google官方也没有出面指明。不过,今天在看某个电影的时候,发现了这个: 这是大家常见的"FBI WARNING"信息,就是警告信息,一般正规影碟前面都有的,告诉观众不得非法传播、拷贝,否则最高可以判5年徒刑或者罚款25万美元(够恨的),而在这些的法律依据,就是"Title 17 U.S.Code, Section 501, 506 and 508"。 所以我觉得gmail退信的原因,和这个Section 501等等有关系,没准就是同一部法律,或者类似的条款,都是关于版权保护的内容。gmail在我转发邮件的时候,发现转发的内容不是我写的,并且和其他groups中的文章惊人的相似,所以就以"Sector 5"为由,拒绝我传播"盗版"了。 |
|
|