|
|
本館粉絲專頁 |
|
|
使用者:Minwei/維基筆記/Mediawiki程式修改
目次 |
[編輯] 1/8
[編輯] 用戶參數設置修正
當資料庫升級後,用戶的參數設置裡的界面語言都被設成en,但新建的用戶預設則是zh-tw,因此,當資料庫升級後,執行以下指令將舊用戶的界面語言由en全改為zh-tw。
- 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,現在可以換下一頁了
[編輯] 顯示貢獻者修改
- 請參閱:棒球維基-顯示貢獻者-之三.doc及User:台灣阿成/我的工作日誌/2005/12
- 不過新版這樣改有點問題,按 其他... 不會顯示其它使用者
[編輯] 修改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' => '簡短頁面',