前几年一直用MediaWiki,从2006年到2010年,在2011年初改用Drupal后,以前的Wiki网站就基本上停止了更新,MediaWiki的版本也停在了1.16,后来还遇到不少网友站长咨询这方面的事情,我也只好告诉对方后面的版本我都不熟悉了。
虽然网站平台停止了更新,但运用还在继续,除了把一些站的留言关闭外,还是有几个历史悠久的网站保留了用户留言、交互的功能,依然需要解决一些遗留的小问题。近期花了一些时间来解决下面几个问题,记录如下:
反垃圾:
这两年国外的垃圾信息没有停,间隔着几天发几条、几十条,挺讨厌的,但又没有到必须用技术手段解决的地步,所以就人工来检查、删除。近期更频繁了,不得不想办法,好在这些国外自动发送的垃圾还是有规律的,就用LocalSettings.php中设置$wgSpamRegex来解决:
$wgSpamRegex="/"."\[\[Image\:.*\.jpg\|thumb\|\]\]"."/";
加上上面这条后,凡是带有[[Image:*.jpg|thumb|]]的垃圾信息就都无法在我们的Wiki网站上发布了,这下可以安心多了!😄
文件缓存更新:
使用MediaWiki的Filecache是我们的传统,对降低服务器负载非常有用,而且我们在为Wiki网站添加繁体版、手机版之后,也都开启了文件缓存,在对includes/HTMLFileCache.php繁体版的语言判断做出修改后,可以正常缓存,但同步更新一直有问题,两年多来几次尝试都没有解决。现在在弄Drupal的过程中对PHP比以前了解了,所以再次来尝试,不过因为对PHP中的类和对象不熟悉,又花了好几天的时间慢慢看、慢慢试,直到今天才终于是可以解决了。办法是修改index.php文件:
$cache = new HTMLFileCache( $wgTitle, $action ); //jamesqi 2013-3-28 purge old file cache // 2013-5-23 add "|| $timestamp == NULL" for deleted pages $title=$wgTitle; $timestamp=$wgTitle->getTouched(); $cachetime=$cache->fileCacheTime(); if ($timestamp > $cachetime || $timestamp == NULL) { # Purge squid for this page only $title->purgeSquid(); # Clear file cache for this page only HTMLFileCache::clearFileCache( $title ); } // if( $cache->isFileCacheGood( /* Assume up to date */ ) ) {
其实原理很简单,读取页面的Touched时间,与缓存文件的CacheTime对比,有更新的时候就清理以前的缓存文件即可。但因为如何获取这几个数值搞了很长时间,总算可以对付过去了。水平太差就是累啊!🥱
表单:
原来用index.php带参数的办法来实现预置一些内容让用户提交,但常遇到用户不熟悉Wiki用法,把格式改乱的情况,也是几年间尝试多次也没有找到合适的办法来解决。
这几天准备尝试SimpleForms.php和Form.php两个扩展程序。前者说是Simple,但把我用糊涂了,好些模板、参数暂时还没有摸清,功能上似乎还不好实现我们的需要;后者要简单一些,我对应以前的三个链接做了三个form出来,以前的模板和说明都稍微改一点就可以继续用,就准备用这个Form.php了。
晚上刚刚改完,自己尝试了还好,功能基本上与以前一样,改善的地方在于用户再也不会因为对Wiki语法不了解把格式弄乱了,麻烦的一点是需要重新输入一遍号码(标题),没有找到省略这个过程的办法,不过也不算很麻烦,用户应该可以接受。
再观察几天,只要这两天网友发布保存的新页面在数量上没有减少、内容上不再有明显的格式错误,那就ok了。😄
评论3
为何关闭它呢
为何关闭它呢 我还越来越喜欢它了您指的是关闭什么?
我们以前MediaWiki建的网站没有关闭,只是内容基本上没有更新了,只进行少量技术维护,主要力量都转到Drupal平台上去了。
自动更新缓存导致负载增加
最近在几台服务器上去掉了Squid缓存,看到负载明显增加,数据库都是几个更改了index.php来自动更新缓存的网站忙,尝试还原后负载就下降了。原因应该是修改了index.php后,虽然可以同步更新文件缓存,但必须先读取数据库来进行判断,当网站多或者访问量大的时候就容易造成数据库的读取堵塞,可能根据实情进行取舍。