前幾年一直用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後,雖然可以同步更新文件緩存,但必須先讀取數據庫來進行判斷,當網站多或者訪問量大的時候就容易造成數據庫的讀取堵塞,可能根據實情進行取舍。