本館粉絲專頁

使用者:Minwei/維基筆記/Mediawiki程式修改

分享此網頁到Facebook
分享此網頁到Plurk
分享此網頁到百度搜藏
分享此網頁到Twitter
分享此網頁到Del.icio.us
最近作者:61.171.157.235 2009年11月25日 (星期三)21:43 ;歷來作者:Minwei61.59.237.200
台灣棒球維基館
跳轉到: 導覽搜尋

目次

 [隱藏

[編輯] 1/8

[編輯] 用戶參數設置修正

當資料庫升級後,用戶的參數設置裡的界面語言都被設成en,但新建的用戶預設則是zh-tw,因此,當資料庫升級後,執行以下指令將舊用戶的界面語言由en全改為zh-tw。

  1. php fixuser.php
fixuser.php的程式碼如下:
<?
$link = mysql_connect("localhost", "root", "password") or die("mysql_connect failed!");
mysql_select_db("mywiki_1_11_0") or die("mysql_select_db failed!");
$sql = "select user_id, user_options from user";
$result = mysql_query($sql) or die("select failed!");

while ($row = mysql_fetch_array($result)) {
	$id = $row['user_id'];
$options = $row['user_options'];
	if (strstr($options, 'language=en')) {
		$newoptions = ereg_replace ('language=en', 'language=zh-tw', $options);
		$s = "update user set user_options = '" . $newoptions . "' where user_id = " . $id;
		mysql_query($s) or die("update failed!");
		echo "fixed id: " . $id . "\n";
	}
}

mysql_free_result($result);
mysql_close ($link);
?>

用 ssh 登入,下sql指令可看得到

[編輯] 3/7

[編輯] 特殊頁面少Recenttalks

將舊的SpecialRecenttalks.php複製到includes目錄

[編輯] Statistics統計頁面仍缺少ActionLogs和SearchLogs

在includes/SpecialStatistics.php加入以下程式:

// search log statistics
// begin
	$wgOut->addHTML( "<h2>" . "Search log statistics" . "</h2>\n" );
	$wgOut->addWikiText("The number of searches:");
	$startyear = 2006;
	for($y = $startyear; $y <= intval(date("Y")); $y++){
		$startmonth = ($y==2005 ? 7 : 1);
		for($m = $startmonth; $m <= 12; $m++){
			$ym = $y . ($m < 10 ? "0" : "") . $m;
			$logfile = "/var/www/logs/searchLogs/searchLog" . $ym . ".txt";
			if (file_exists($logfile)){
				$searchcount = count(file($logfile));
				$wgOut->addWikiText("*" . $y . ($m < 10 ? "/0" : "/") . $m . ": " . $searchcount );
			}
		}
	}
// end

// action log statistics
// begin
	$wgOut->addHTML( "<h2>" . "Action log statistics" . "</h2>\n" );
	$wgOut->addWikiText("The number of actions (view, edit, submit ...):");
//	$startyear = 2005;
	$startyear = intval(date("Y"));
//	$startmonth = 1;
	$startmonth = intval(date("m"));
	$startdate = 1;
	for($y = $startyear; $y <= intval(date("Y")); $y++){
//		for($m = $startmonth; $m <= 12; $m++){
		$m = $startmonth;
		for($d = $startdate; $d <= 31; $d++){
			$ym = $y . ($m < 10 ? "0" : "") . $m;
			$ymd = $y . ($m < 10 ? "0" : "") . $m . ($d < 10 ? "0" : "") . $d;
			$dir = "/var/www/logs/actionLogs/" . $ym . "/" . $ymd;
			if (is_dir($dir)){
				if ($d == 1) { $wgOut->addWikiText("----"); }
				$actioncount = 0;
				for ($h = 0; $h <=  23; $h++){
 					$ymdh = $ymd . ($h < 10 ? "0" : "") . $h;
					$numfile = $dir . "/actionNum" . $ymdh . ".txt";
					if (file_exists($numfile)){
						$fp = fopen($numfile, 'r');
							$actioncount += intval(fgets($fp));
						fclose($fp);
					}
				}
				$wgOut->addWikiText("*" . $y . ($m < 10 ? "/0" : "/") . $m . ($d < 10 ? "/0" : "/") . $d . ": " . $actioncount );
			}
		}
	}

// end

[編輯] 編輯頁面少了7個icon

在EditPage.php的「$toolarray」加入以下程式:
			array(	'image'	=>	'Template_button.png',
				'open'	=>	"{{ }}",
				'close'	=>	'',
				'sample'=>	'',
				'tip'	=>	wfMsg('Template_tip'),
				'key'	=>	''
				),
			array(	'image'	=>	'Button_strike.png',
				'open'	=>	"\\<del>\\n",
				'close'	=>	"\\</del>\\n",
				'sample'=>	'',
				'tip'	=>	wfMsg('strike_tip'),
				'key'	=>	''
				),
			array(	'image'	=>	'Button_enter.png',
				'open'	=>	"<br />",
				'close'	=>	'',
				'sample'=>	'',
				'tip'	=>	wfMsg('enter_tip'),
				'key'	=>	''
				),
			array(	'image'	=>	'Btn_toolbar_gallery.png',
				'open'	=>	"\\<gallery>\\n",
				'close'	=>	"\\</gallery>\\n",
				'sample'=>	'',
				'tip'	=>	wfMsg('gallery_tip'),
				'key'	=>	''
				),
			array(	'image'	=>	'Button_shifting.png',
				'open'	=>	':',
				'close'	=>	'',
				'sample'=>	'',
				'tip'	=>	wfMsg('shifting_tip'),
				'key'	=>	''
				),
			array(	'image'	=>	'Button_redirect.png',
				'open'	=>	'#REDIRECT [[PAGENAME]]',
				'close'	=>	'',
				'sample'=>	'',
				'tip'	=>	wfMsg('redirect_tip'),
				'key'	=>	''
				),
			array(	'image'	=>	'Button_hide_comment.png',
				'open'	=>	"\\<!--\\n",
				'close'	=>	"\\-->\\n",
				'sample'=>	'',
				'tip'	=>	wfMsg('hide_comment_tip'),
				'key'	=>	''
				)

並將7個png圖檔copy到skins/common/images目錄


[編輯] 頁面少了(talk)

在includes/Parser.php新增以下兩行:

$n = $user->getName();
$sigText = $sigText . "([[user_talk:$n|Talk]])";

[編輯] log未記錄搜索的關鍵字

修改SpecialSearch.php,加入以下程式

// To record what user's have searched in our wiki.
function searchTextLog($searchText, $num){
        global $wgIP, $wgRequest;
        $title = $wgRequest->getVal( 'title' );
        // Write to searchLog file
        $fp = fopen("/var/www/logs/searchLogs/searchLog" . date("Ym") . ".txt", "a");
        $date = date("Y-m-d") . "," . date("H:i:s");
        if ( isset( $_SESSION['wsUserName'] ) ) {
                $sUser = "User" . "," . $_SESSION['wsUserName'];
        } else {
                $sUser = "IP" . "," . $wgIP;
        }
        $outputstring = $date . "," . $searchText . "," . $num . "," . $sUser . "\n";
        if ($title != "") { fwrite($fp, $outputstring); }
        fclose($fp);
}

並有多處return的地方要改

[編輯] 最近更改頁面<ul>改成<ol>

修改includes/ChangesList.php,將<ul>改成<ol>

[編輯] 參數設置/界面語言 設成zh-中文時頁面無法顯示

在languages/classes目錄下原本有一個檔案LanguageZh_cn.php被我移走,原因是檢索時會有影響,但卻產生了另外的問題,因此將此檔移回,再修正此檔即可。請參閱:棒球維基Linux版中文搜索問題修正-之二.doc

[編輯] 3/17

[編輯] BRef與sp多語跨站連結修正

修改languages/Names.php:

新增兩行
'bref' => 'Baseball-Reference',
'sp' => 'Spanish (Wikipedia)',

並在 ‘en’, ‘jp’, ‘ko’, ‘nl’ 及 ‘zh’ 後加上 (Wikipedia) ← 應該是‘ja’?
但這樣顯示仍然不對,要在棒球的那個頁面按編輯再儲存就OK了 ←這點我看不懂
在 我的參數設置/界面語言 內也會出現(Wikipedia),這點會變成有點奇怪,但不影響更改為其它語言,如:zh-中文 (Wikipedia)


[編輯] 簽名後的日期修改

修改includes/Parser.php:
在function pstPass2()內加global $wgLang;並註解以下兩行

$d = $wgContLang->timeanddate( date( 'YmdHis' ), false, false) .
  ' (' . date( 'T' ) . ')';

再新增以下一行:

$d = $wgLang->timeanddate( date( 'YmdHis' ), false );


[編輯] 用戶列表 (依編輯數排序)修正

修改includes/SpecialListusersbyedits.php,現在可以換下一頁了


[編輯] 顯示貢獻者修改

[編輯] 修改includes/DefaultSettings.php

因此,只修改了includes/DefaultSettings.php兩行:

$wgMaxCredits = 3;
$wgAllowRealName = false;

[編輯] 修改skins/MonoBook.php

將貢獻者顯示移到上面
找到以下這行:

<h1 class="firstHeading"><?php $this->data['displaytitle']!=""?$this->html('title'):$this->text('title') ?></h1>

在此行之後加上以下:

<?php if($this->data['credits']) { ?><div id="byLine"><?php $this->html('credits');?></div><?php } ?>

再找到以下這行:

'lastmod', 'viewcount', 'numberofwatchingusers', 'credits', 'copyright',

將此行改成:

'lastmod', 'viewcount', 'numberofwatchingusers', 'copyright',

[編輯] skins/monobook/main.css

調整字型
加上以下:

#byLine {
    text-align: right;
    font-size: 75%;
    line-height: 1em;
    margin: 0 0 0 0;
    color: #7d7d7d;
    width: auto;
}

另外,顯示的字樣可修改以下兩個系統變數:

lastmodifiedat		本頁最後更動時間:$1 $2。
lastmodifiedatby	此頁由$3於$1 $2的最後更改。
othercontribs		在$1的工作基礎上。

註:前兩個變數與舊版的名稱有異,舊版的為:

  • lastmodified
  • lastmodifiedby

[編輯] 修改includes/Credits.php

[編輯] 在function getCredits()內加上以下

if ($timestamp) {
        $d = $wgLang->date($article->getTimestamp(), true);
        $t = $wgLang->time($article->getTimestamp(), true);
} else {
        $d = '';
        $t = '';
}

更改這行

$s .= ' ' . getContributorCredits($article, $cnt - 1, $s howIfMax);
成
$s .= getContributorCredits($article, $cnt - 1, $showIfM ax) . ' | ' . $t . ',' . $d;

[編輯] 在function getAuthorCredits()內註解以下

$timestamp = $article->getTimestamp();
if ($timestamp) {
        $d = $wgLang->date($article->getTimestamp(), true);
        $t = $wgLang->time($article->getTimestamp(), true);
} else {
        $d = '';
        $t = '';
}

更改這行

$author_credit = wfMsg('siteuser', creditLink($user_name));
成
$author_credit = creditLink($user_name);

另,更改這行

return wfMsg('lastmodifiedatby', $d, $t, $author_credit);
成
return wfMsg('lastmodifiedatby', '', '', $author_credit);

[編輯] function getContributorCredits()內註解以下行

$user = wfMsg('siteusers', $user);

[編輯] 修改languages/messages MessagesZh_tw.php

將以下這行

'lastmodifiedatby' => '此頁由$3於$1 $2的最後更改。', # $1 date, $2 time, $3 user
改成
'lastmodifiedatby' => '最近作者:$3$1$2', # $1 date, $2 time, $3 user

新版的作者與日期是個連體嬰,程式改了不少才把日期顯示在最後,但不知會不會有副作用!

[編輯] 子頁時無法上一層修正

狀況如[王建民(1980)/賽事記錄] 沒有回上一層的link
修改includes/Skin.php
在function subPageSubtitle()內,將以下這行

if($wgOut->isArticle() && !empty($wgNamespacesWithSubpages[$wgTitle->getNamespace()])) {

改成

if($wgOut->isArticle()) {

這段與舊版的差不多,程式是不用改的,但新版就是無法顯示回上一層的link,trace了好久,這樣改好像可成功,但不知會不會有副作用!

[編輯] 3/28

[編輯] 創建縮圖錯誤

[編輯] 問題描述

原來以下這頁面[1],會出現以下字串:

創建縮圖錯誤: libgomp: Thread creation failed: Cannot allocate memory

原來的圖檔Baseball100eDM.jpg是1004 × 1751 像素,但在頁面上要顯示344 × 600 像素,這時出現了問題。
Trace程式,在includes/GlobalFunctions.php,function wfShellExec()函數內有這麼一行:

 exec( $cmd, $output, $retval );

就是這行出現這創建縮圖錯誤訊息啦!

把Baseball100eDM.jpg複製成Testing.JPG ,在上傳此檔時把$cmd dump出來:

'/var/www/ndapwiki-1.11.1/bin/ulimit4.sh' 30 102400 102400 ''\''/usr/bin/convert'\'' -quality 80 -background white -size 449 '\''/var/www/ndapwiki-1.11.1/images/0/0b/Testing.JPG'\'' -coalesce -thumbnail '\''449x599!'\'' -depth 8 -sharpen '\''0x0.4'\'' '\''/var/www/ndapwiki-1.11.1/images/thumb/0/0b/Testing.JPG/449px-Testing.JPG'\'' 2>&1'

直接在系統執行這行指令,果然出現以下錯誤訊息

libgomp: Thread creation failed: Cannot allocate memory

ulimit4.sh檔內呼叫了bash內建的指令ulimit,接下去很難再追蹤,先就此打住,以後再好好研究,現行的環境這個問題解決方法有二

[編輯] 方法一

在includes/GlobalFunctions.php,function wfShellExec()函數內有以下的程式碼

if ( php_uname( 's' ) == 'Linux' ) {

…

} elseif ( php_uname( 's' ) == 'Windows NT' ) {

…

}

將以上程式碼全部註解即可

註解後$cmd會變成:

'/usr/bin/convert' -quality 80 -background white -size 449 '/var/www/ndapwiki-1.11.1/images/0/0b/Testing.JPG' -coalesce -thumbnail '449x599!' -depth 8 -sharpen '0x0.4' '/var/www/ndapwiki-1.11.1/images/thumb/0/0b/Testing.JPG/449px-Testing.JPG' 2>&1

這不會用到ulimit4.sh,也就OK啦!

[編輯] 方法二

將LocalSettings.php以下兩行註解

$wgUseImageMagick = true;

$wgImageMagickConvertCommand = "/usr/bin/convert";

這時縮圖時不會用到ImageMagick的函數而改用GD函數


註一:目前是用方法一,因為ImageMagick的縮圖好像比較好(網路上聽來的啦)

註二:45那台暫時沒改,可用Testing.JPG去玩一下

[編輯] 方法三

顾名思义,这个错误的是php外部程序调用的时候内存受到限制。只需要扩展运行程序的内存就可以了。在LocalSettings.php中加上如下配置即可。

$wgMaxShellMemory = 1048576;

[編輯] 編輯頁icon的tip顯示不對

修改languages/messages /MessagesZh_tw.php,找到以下這行

'hr_tip'          => '水平線 (小心使用)',

在這行之後加上以下幾行

'template_tip'    => '應用模板',
'strike_tip'      => '刪除線',
'enter_tip'       => '換行',
'gallery_tip'     => '畫廊',
'shifting_tip'    => '縮進',
'redirect_tip'    => '轉址',
'hide_comment_tip' => '註釋或隱藏文字',

修改languages/messages / MessagesEn.php,找到以下這行

'hr_tip'          => 'Horizontal line (use sparingly)',

在這行之後加上以下幾行

'strike_tip'      => 'Strike',
'enter_tip'       => 'Enter',
'gallery_tip'     => 'Gallery',
'shifting_tip'    => 'Shifting',
'redirect_tip'    => 'Redirect',
'hide_comment_tip' => 'Hide comment',

修改languages/messages /MessagesZh_cn.php,找到以下這行

'hr_tip'          => '水平线 (小心使用)',

在這行之後加上以下幾行

'template_tip'    => '应用模板',
'strike_tip'      => '删除线',
'enter_tip'       => '换行',
'gallery_tip'     => '画廊',
'shifting_tip'    => '缩进',
'redirect_tip'    => '转址',
'hide_comment_tip' => '注释或隐藏文字',

[編輯] 用戶列表 (依編輯數排序)的頁面管理員顯示有錯

修改includes/ SpecialListusersbyedits.php,找到以下片斷,加上'//'那一行

return array(
        'tables' => " $user LEFT JOIN $user_groups ON user_id=ug_user LEFT JOIN $ipblocks ON user_id=ipb_user AND ipb_auto=0 ",
        'fields' => array('user_name',
                'user_editcount AS value',
                'user_registration AS regdate',
                //'MAX(user_id) AS user_id',
                'MAX(user_editcount) AS user_editcount',
                'COUNT(ug_group) AS numgroups',
                'MAX(ug_group) AS singlegroup'),
        'options' => array('GROUP BY' => 'user_name'),
        'conds' => $conds
);

[編輯] 用戶登錄時如密碼打錯以後會有問題

用戶登錄時如密碼打錯,以後再用同IP登入時會一直出現圖片驗證,沒通過圖片驗證則無法登錄,此原因是server端cache所致,解決方式是暫停httpd,清除cache之後再重啟httpd,如下:

# cd /var/cache/php-eaccelerator
# /etc/init.d/httpd stop
# rm -rf *
# /etc/init.d/httpd start

[編輯] 8/24

[編輯] 新增簡短頁面

複製 SpecialShortpages.php 成 SpecialBriefpages.php

[編輯] 修改SpecialBriefpages.php

修改所有的Short成Brief,在程式的最前面先定義$bytes變數

從QueryPage.php複製function outputResults到class BriefPagesPage內,再增加以下數行到function outputResults的最前面:

global $wgContLang, $bytes;

$choose = '<div class="brief"><form method="get" action="/wiki/index.php/Special:Briefpages">' .
'<table><tbody><tr>' .
'<td align="right"><label for="choose">Choose: articles length less than</label></td>' .
'<td><select id="bytes" name="bytes" class="bytes">';
if ($bytes == 100)
      $choose .= '<option value="100" selected="selected">100 bytes</option>';
else
      $choose .= '<option value="100">100 bytes</option>';
if ($bytes == 150)
      $choose .= '<option value="150" selected="selected">150 bytes</option>';
else
      $choose .= '<option value="150">150 bytes</option>';

if ($bytes == 200)
      $choose .= '<option value="200" selected="selected">200 bytes</option>';
else
      $choose .= '<option value="200">200 bytes</option>';

if ($bytes == 250)
      $choose .= '<option value="250" selected="selected">250 bytes</option>';
else
      $choose .= '<option value="250">250 bytes</option>';

if ($bytes == 300)
      $choose .= '<option value="300" selected="selected">300 bytes</option>';
else
      $choose .= '<option value="300">300 bytes</option>';

$choose .= '</select><input value="submit" type="submit"></td></tr></tbody></table></form></div>';

$out->addHtml( $choose );

在function getSQL先定義以下:

global $bytes;

再找到以下這行:

WHERE page_namespace=".NS_MAIN." AND page_is_redirect=0";

改成以下:

WHERE page_len < " . $bytes . " AND page_namespace=".NS_MAIN." AND page_is_redirect=0";

在function wfSpecialBriefpages先定義以下:

global $wgRequest, $bytes;

再加上以下數行:

$bytes = $wgRequest->getInt( 'bytes' );

if (!$bytes)

      $bytes = 200;

再將以下這行:

return $spp->doQuery( $offset, $limit );

改成:

return $spp->doQuery( $offset, 10000, false );

[編輯] 修改SpecialPage.php

找到以下這行

'Shortpages' => array( 'SpecialPage', 'Shortpages ' ),

在此行之後新增以下1行:

'Briefpages' => array( 'SpecialPage', 'Briefpages ' ),

[編輯] 修改languages/messages/MessagesEn.php

找到以下這行

'Shortpages' => array( 'Shortpages' ),

在此行之後新增以下1行:

'Briefpages' => array( 'Briefpages' ),
languages/messages/MessagesZh_tw.php

找到以下這行

'shortpages' => '短頁面',

在此行之後新增以下1行:

'Briefpages' => '簡短頁面',