MediaWiki的升级并不轻松,因为我们已有的网站都有不少地方采用了特别的扩展程序、进行了特别设置、甚至进行了源程序的改动,所以有不少细节需要检查、修复和改进,这次时隔4年后进行1.16.0到1.23.5的升级也遇到好些问题,下面进行记录。
一、扩展程序:
- 与1.16.0配合的多数扩展程序都不能与1.23.5配合了,直接升级会遇到很多报错,我是先关闭CommonSettings.php中的一些第三方扩展,进行核心程序升级,以后再安装新的第三方扩展;
二、设置修改:
- 如果用到用户数据库的共享,升级的时候也会遇到问题,具体请看Manual:Shared database,可以使用update.php --doshared这个参数来做共享数据库用户表的升级;
三、皮肤文件:
- 顺便把以前的广告代码、统计代码进行更新,并把广告代码尽量转移到Vector.php中,清空相应广告模板中的内容
- 另外,找到了办法可以尽量少修改皮肤文件,甚至可以不修改皮肤文件,而是通过在LocalSettings.php中添加参数来进行设置;
四、繁体版本:
-
多语言:MediaWiki:Variantname的各种中文版本以前设置为disable,现在需要删除
- 让繁体版也用File Cache:修改includes/cache/HTMLFileCache.php,将
-
elseif ( $query === 'maxage' || $query === 'smaxage' ) {
改为
-
} elseif ( $query === 'maxage' || $query === 'smaxage' || $query === 'variant' ) {
将
-
return !$user->getId() && !$user->getNewtalk() && $ulang == $clang;
改为
-
return !$user->getId() && !$user->getNewtalk();
五、多个版本同步更新缓存的问题:
繁体版File Cache更新问题:1.10版本好像没有问题,1.15改index.php解决,但1.16.0版本始终没有解决,在index.php中调试下面的代码没有成功:
/* //jamesqi 2013-3-28 purge old file cache $title=$wgTitle; $timestamp=$wgTitle->getTouched(); $cachetime=$cache->fileCacheTime(); if ($timestamp > $cachetime) { # Purge squid for this page only $title->purgeSquid(); # Clear file cache for this page only HTMLFileCache::clearFileCache( $title ); } // */
这次找到1.15中改index.php的一个例子,将1.16.0的index.php这样修改也可以了,将:
-
if( $cache->isFileCacheGood( /* Assume up to date */ ) ) {
改为
-
if( $cache->isFileCacheGood( '20880808112233' ) ) {
也就是改为一个始终大于目前日期的日期数字
1.23.5版本的index.php中没有上面的内容了,要改includes/Wiki.php,将
-
if( $cache->isCacheGood( /* Assume up to date */ ) ) {
改为
-
if( $cache->isCacheGood( '20880808112233' ) ) {
- 以上办法仍然不对,现在在1.23.5中改为修改includes/cache/FileCacheBase.php ,让清除简体中文版的文件缓存时,一起把简体手机版、繁体中文版、繁体手机版的文件缓存都删除,代码:
-
public function clearCache() { wfSuppressWarnings(); //jamesqi 2014-11-5//unlink( $this->cachePath() ); //add start $cachePath_zh_cn=$this->cachePath(); $cachePath_zh_tw=str_replace('www.','tw.',$cachePath_zh_cn); $cachePath_zh_cn_mobile=str_replace('www.','m.',$cachePath_zh_cn); $cachePath_zh_tw_mobile=str_replace('www.','tw.m.',$cachePath_zh_cn); unlink( $cachePath_zh_cn ); unlink( $cachePath_zh_tw ); unlink( $cachePath_zh_cn_mobile ); unlink( $cachePath_zh_tw_mobile ); //add end wfRestoreWarnings(); $this->mCached = false; }
六、其它问题:
- 报错:A database query error has occurred. This may indicate a bug in the software.,可能是LocalSettings.php或者Vector.php设置不当;
- 遇到php版本过低的情况,就需要php升级到更新版本,mediawiki-1.23.5的要求:
* Web server with PHP 5.3.2 or higher.
* MySQL 5.0.2 or higher - php安装后一些warning, notice报错,改了一下php.ini:error_reporting = E_ALL & ~E_NOTICE,再重启apache,刷新页面可以了
- php重新安装后无法连接数据库,修改php.ini中的mysql, mysqli, pdo文件
- php报date()有错,需要设置时区(设置时区后mediawiki filecache文件缓存.html.gz压缩文件无法呈现的问题也自动解决了,这个问题存在很多年了,以前一直没有找到确切的问题所在)
- extension:include_php被删除了,无法实现升级,但依然可以用
- 手机版xmlsitemap,在对应的电脑版maintenance下需要添加一个修改后的文件generateSitemapMobile.php,参看:《MediaWiki网站手机版的站点地图Mobile_XML_Sitemap》
- 遇到用脚本升级总是提示DPL报错,临时做一个CommonSettings_mingluji_pucha_temp-1.23.php 这个文件,其中把DPL的调用关闭了,现在可以运行脚本升级了
- 遇到数据量大的网站pucha总是升级不成功,中途报错,主要是categorylinks这个表太大,有上千万条数据,加大mysql的超时限制后,很快中断的情况改善一些,但也没有把全部升级执行完,后来临时复制到一个单独的库中进行升级,与接受访问的网站分离开才好
补充:繁体版访问遇到apache日志中报错:
PHP Notice: Undefined index: par2 in /includes/PathRouter.php on line 283
想了半天办法,最后还是修改了PathRouter.php这个文件:
if(array_key_exists( "par{n}",$m ) ) {//jamesqi 2015-2-4
$value = rawurldecode( $m["par{$n}"] );
} else {
$value = '';
}
这样就不报错了
修改 includes/CategoryViewer.php 让手机版分类页面列表三列改为一列
if (substr($_SERVER['SERVER_NAME'],0,7) == 'mobile.') {//mobile $columns = array_chunk( $columns, ceil( count( $columns ) / 1 ), true /* preserve keys */ ); } else {//desktop $columns = array_chunk( $columns, ceil( count( $columns ) / 3 ), true /* preserve keys */ ); }
评论