当前位置

几个MediaWiki遗留问题:反垃圾、文件缓存更新、表单

James Qi 在 2013年3月28日 - 15:09 提交
内容摘要:前几年一直用MediaWiki,从2006年到2010年,在2011年初改用Drupal后,以前的Wiki网站就基本上停止了更新,MediaWiki的版本也停在了1.16,后来还遇到不少网友站长咨询这......

  前几年一直用MediaWiki,从2006年到2010年,在2011年初改用Drupal后,以前的Wiki网站就基本上停止了更新,MediaWiki的版本也停在了1.16,后来还遇到不少网友站长咨询这方面的事情,我也只好告诉对方后面的版本我都不熟悉了。

  虽然网站平台停止了更新,但运用还在继续,除了把一些站的留言关闭外,还是有几个历史悠久的网站保留了用户留言、交互的功能,依然需要解决一些遗留的小问题。近期花了一些时间来解决下面几个问题,记录如下:

反垃圾:

  这两年国外的垃圾信息没有停,间隔着几天发几条、几十条,挺讨厌的,但又没有到必须用技术手段解决的地步,所以就人工来检查、删除。近期更频繁了,不得不想办法,好在这些国外自动发送的垃圾还是有规律的,就用LocalSettings.php中设置$wgSpamRegex来解决:

$wgSpamRegex="/"."\[\[Image\:.*\.jpg\|thumb\|\]\]"."/";

  加上上面这条后,凡是带有[[Image:*.jpg|thumb|]]的垃圾信息就都无法在我们的Wiki网站上发布了,这下可以安心多了!smiley

文件缓存更新:

  使用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对比,有更新的时候就清理以前的缓存文件即可。但因为如何获取这几个数值搞了很长时间,总算可以对付过去了。水平太差就是累啊!blush

表单:

  原来用index.php带参数的办法来实现预置一些内容让用户提交,但常遇到用户不熟悉Wiki用法,把格式改乱的情况,也是几年间尝试多次也没有找到合适的办法来解决。

  这几天准备尝试SimpleForms.php和Form.php两个扩展程序。前者说是Simple,但把我用糊涂了,好些模板、参数暂时还没有摸清,功能上似乎还不好实现我们的需要;后者要简单一些,我对应以前的三个链接做了三个form出来,以前的模板和说明都稍微改一点就可以继续用,就准备用这个Form.php了。

  晚上刚刚改完,自己尝试了还好,功能基本上与以前一样,改善的地方在于用户再也不会因为对Wiki语法不了解把格式弄乱了,麻烦的一点是需要重新输入一遍号码(标题),没有找到省略这个过程的办法,不过也不算很麻烦,用户应该可以接受。

  再观察几天,只要这两天网友发布保存的新页面在数量上没有减少、内容上不再有明显的格式错误,那就ok了。laugh

评论

-- 发自IP地址: 58.48.153.62 (位置 | 谁是)

最近在几台服务器上去掉了Squid缓存,看到负载明显增加,数据库都是几个更改了index.php来自动更新缓存的网站忙,尝试还原后负载就下降了。原因应该是修改了index.php后,虽然可以同步更新文件缓存,但必须先读取数据库来进行判断,当网站多或者访问量大的时候就容易造成数据库的读取堵塞,可能根据实情进行取舍。

James Qi / 祁劲松

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符