|
本館粉絲專頁 |
|
|
使用者: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' => '簡短頁面',