MediaWiki

出自 ProgWiki
前往: 導覽搜尋
MediaWiki
建立縮圖錯誤: 無法儲存縮圖至目標

作者
研發者 维基媒体基金会
最初正式版 2002年1月25日
最新穩定版 1.25.2 / 2015年08月10日,2年前2015-08-10
最新測試版 /
作業系統 跨平台
系统平台
可用語言 超过300种语言
類型 Wiki引擎
授權協議 GPLv2+
網站 http://www.mediawiki.org

MediaWiki,參照:『維基百科~MediaWiki

安裝

相關文件

編輯手冊

研發手冊

Wiki網站介面

其他

編輯工具強化

  • 以下來自中文維基百科,需重新啟動MediaWiki系統,才會有作用(像是修改LocalSettings.php)……
中文維基百科 本站
  1. MediaWiki:Edittools
  2. Template:Edittools
  3. MediaWiki:Common.js
  4. MediaWiki:Common.js/search.js
  5. MediaWiki:Common.js/edit.js
  6. MediaWiki:Edittools.js
  7. MediaWiki:Edittool-plus.js‎
  8. MediaWiki:Gadgets-definition
  9. MediaWiki:Gadget-HotCat.js
  10. MediaWiki:Gadget-specialchars.js
  11. MediaWiki:Gadget-Edittools-vector.js
  1. MediaWiki:Edittools
  2. Template:Edittools
  3. MediaWiki:Common.js
  4. MediaWiki:Common.js/search.js
  5. MediaWiki:Common.js/edit.js
  6. MediaWiki:Edittools.js
  7. MediaWiki:Edittool-plus.js‎
  8. MediaWiki:Gadgets-definition(小工具)
  9. MediaWiki:Gadget-HotCat.js(快速增加分類)
  10. MediaWiki:Gadget-specialchars.js(將Template:Edittools的內容移到編輯內容之上)
  11. MediaWiki:Gadget-Edittools-vector.js(擴充編輯工具按鈕)
  • 相關:
  1. 參照:『維基百科~Wikipedia:維基百科工具/編輯工具』(可與MediaWiki:Common.js相對照)

外掛

預設在編輯時使用WikiEditor
#---------------------------
# Enables use of WikiEditor by default but still allow users to disable it in preferences
$wgDefaultUserOptions['usebetatoolbar'] = 1;
$wgDefaultUserOptions['usebetatoolbar-cgd'] = 1;
 
# Displays the Preview and Changes tabs
$wgDefaultUserOptions['wikieditor-preview'] = 1;
 
# Displays the Publish and Cancel buttons on the top right side
$wgDefaultUserOptions['wikieditor-publish'] = 1;
tabs與tab語法
  • Extension:Tabs……Tab頁簽
    會與Interwiki發生衝突?需關閉Interwiki
#require_once "$IP/extensions/Interwiki/Interwiki.php";
rss語法
categorytree語法
File語法(允許上傳影片檔)
其他外掛(需用git下載)
 https://git.wikimedia.org/git/mediawiki/extensions.git
關於Gadgets
中文維基百科 本站
  1. MediaWiki:Gadgets-definition
  2. MediaWiki:Gadget-JSL.js
  3. MediaWiki:Gadget-modernskin-thunks.js
  4. MediaWiki:Gadget-specialchars.js
  5. MediaWiki:Gadget-edit0.js
  6. MediaWiki:Gadget-HotCat.js
  7. MediaWiki:Gadget-popups.js
目前未使用
  1. MediaWiki:Gadgets-definition

其他相關

MediaWiki

Semantic MediaWiki

相關討論區

FAQ

啟用Debug模式

  • 在 LocalSettings.php
error_reporting( -1 );
ini_set( 'display_startup_errors', 1 );
ini_set( 'display_errors', 1 );
$wgShowSQLErrors = true;
$wgDebugDumpSql  = true;
$wgShowExceptionDetails = true;

【安全性相關】禁止未登入者編輯

  • 用途:防止來路不明的廣告
  • 資料來源: Manual:User_rights
  • 在LocalSettings.php的最後面追加:
#禁止未登入者建立帳號
$wgGroupPermissions['*']['createaccount'] = false;
#禁止未登入者編輯
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['writeapi'] = false;
$wgGroupPermissions['*']['createpage'] = false;
$wgGroupPermissions['*']['createtalk'] = false;

【安全性相關】防止異常URL耗盡主機的CPU資源

  • 警告, MediaWiki 各版本可能隱含CPU資源耗盡的漏洞?(目前已知MediaWiki 1.12.0有此漏洞)。
  • 治標方式,修改index.php
  1. 將未有title參數的URL,重定向到首頁。(title為null或空字串)
  2. action為URL中第一個傳入參數,此為非正常的MediaWiki的URL,重定向到首頁。
  3. 迴避Ajax的分類樹的URL參數(?action=ajax與?rs=)
# Query string fields
$action = $wgRequest->getVal( 'action', 'view' );
$title = $wgRequest->getVal( 'title' );
 
#請自行加上,下面這段, 可將非正常參數的URL導向首頁  Fix Bug?
#(如果你的首頁位置不是「index.php/%E9%A6%96%E9%A0%81」,請自行改寫下列header內的字串)
if (is_null($_GET["rs"]) and ((is_null( $title ) or ($title == "")) or
	((substr($_SERVER['QUERY_STRING'],0,7)=='action=') and ($_GET["action"]!="ajax"))))
{
	header("Location: index.php/%E9%A6%96%E9%A0%81"); exit;
	#header("Location: " & $wgScriptPath & "/index.php/%E9%A6%96%E9%A0%81" ); exit;
}

伺服器端縮圖失敗

  • 用途:禁止伺服器端縮圖
  • 由於PHP的安全性設定,導致與縮圖相關的程式碼跑到passthru()就跳失敗了
  • 在LocalSettings.php的最後面追加下列兩行:
$wgUseImageMagick = false;
$wgUseImageResize = false;

MediaWiki機器人

計算內部連結的紅連與藍連的數量

javascript:(function(){var%20j=0;var%20array=document.getElementById('content').getElementsByTagName('A');var%20k=array.length;for(i=0;i%3Carray.length;i++){l=array[i].href;if(l.indexOf(document.location.href.split(/^http\:\/\/([a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)%3F)\//)[1])%3C0||l.indexOf('%23')%3E0||l.indexOf('section')%3E0)k--;if(l.indexOf('redlink')%3E0){j++;k--;}}prompt(document.getElementById('firstHeading').textContent+'%E5%85%B1%E6%9C%89%EF%BC%9A','%E7%B4%85%EF%BC%9A'+j+'%20%E8%97%8D%EF%BC%9A'+k+'%20%E6%AF%94%E4%BE%8B%EF%BC%9A'+(j/k));})();

User自訂Skin的js與css

$wgAllowUserJs = true;
$wgAllowUserCss = true;

自定網路書源

  • Manual:ISBN
  • 以中文介面為例,需改 languages/messages/MessagesZh_hant.php 裡的 $bookstoreList
$bookstoreList = array(
	'博客來書店' => 'http://search.books.com.tw/exep/prod_search.php?cat=BKA&key=$1&apid=books&areaid=head_cat_search',
	'三民書店' => 'http://www.sanmin.com.tw/page-qsearch.asp?ct=search_isbn&qu=$1',
	'天下書店' => 'http://www.cwbook.com.tw/searchProduct/QueryProductAction.shtml?searchField=ISBN&searchKeyWord=$1&searchUpAge=&searchBottomAge=',
	'新絲路書店' => 'http://www.silkbook.com/search_result.asp?SearchText=$1&SearchOption=4'
);

如何只使用一份MediaWiki的Code去架多個Wiki

維基農場
  • 請注意,MediaWiki是很吃資源的一種Wiki,架設過多的Wiki,可能會導致被php虛擬主機商強迫關站,因此使用前請三思。
  1. MediaWiki下載與安裝(限定使用1.25~1.19的版本,例如安裝在 /wiki),最初安裝時資料庫前置使用「 mw_ 」以便配合Extension:Farmer。
  2. Extension:Farmer下載對應的版本,將該外掛放到 extensions 資料夾裡。
  3. 將外掛的farmer.sql,拿到資料庫裡跑過一遍,建立相關的資料表。再把 mw_user 建立檢視 user。
  4. 修改你的 LocalSettings.php,以下內容請配合你最初安裝MediaWiki的設定做修改:
# MySQL specific settings
$wgDBprefix = "mw_";

$callingurl = $_SERVER['REQUEST_URI'];
if ( preg_match(  '/[^\/]+/', $callingurl, $matches ) === 1 ) {
   if ( array_key_exists( 0, $matches ) ) {
       //$wgDBprefix = $matches[0] . "_";
       $wgScriptPath = "/" .$matches[0];
       $wgStylePath = "$wgScriptPath/skins";
       
        //$wgLogo = "/wikis/" . $matches[0] ."/wiki.png";
        $wgUploadDirectory = "/home/wf0822/public_html/wikis/" . $matches[0] ."/images"; 
        $wgUploadPath = "/wikis/" . $matches[0] ."/images";
   }
}

# 中間的其他設定
#

require_once( "$IP/extensions/Farmer/Farmer.php" );
 
/* We use the internal _matchByURLHostname function to find the wiki name */
#依子目錄區分的模式
$wgFarmerSettings['wikiIdentifierFunction'] = array( 'MediaWikiFarmer', '_matchByURLRegExp' );
$wgFarmerSettings['matchRegExp'] = '/[^\/]+/';
$wgFarmerSettings['matchOffset'] = 0;

$wgFarmerSettings['dbAdminUser'] = $wgDBadminuser;
$wgFarmerSettings['dbAdminPassword'] = $wgDBadminpassword;
$wgFarmerSettings['databaseName'] = $wgDBname;
$wgFarmerSettings['dbTablePrefixSeparator'] = '_';

# Use this file in early versions
$wgFarmerSettings['newDbSourceFile'] = realpath( dirname( __FILE__ ) ) . '/maintenance/tables.sql';
$wgFarmerSettings['defaultWiki'] = "mw"; # Change it to one you want required by default

$wgFarmer = new MediaWikiFarmer( $wgFarmerSettings );
 
$wgFarmer->run();
  • 依子目錄區分的模式需要在網站根目錄的.htaccess 設定 Url Rewrite
SetEnv TZ Asia/Taipei

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^[^\/]+/(.+)$ wiki/$1 [PT,L,QSA]
RewriteRule ^[^\/]+/$ wiki/index.php [PT,L,QSA]
RewriteRule ^[^\/]+$ wiki/index.php [PT,L,QSA]
  • 修改MediaWikiFarmer_Wiki.php(不然新建Wiki時,相關的資料表無法順利建立?)
    • 未完,待查 (目前預設首頁與預設User與群組資料, 沒有正常建立? 原因不明)
	public function create() {
		$farmer = MediaWikiFarmer::getInstance();

		// save the database prefix accordingly
		$this->wgDefaultSkin = $farmer->defaultSkin;

		// before we create the database, make sure this database doesn't really exist yet
		if ( !$this->exists() && !$this->databaseExists() ) {
#
global $wgDBprefix, $wgDBname; 
    $wgDBprefix_tmp = $wgDBprefix;
    $wgDBprefix= $this->_name . '_';
     $db2 = $this->getDatabase();
     $db2->tablePrefix($wgDBprefix);
     $db2->selectDB( $wgDBname );
#
			 $this->save();
 			$this->createDatabase();
			$farmer->updateFarmList();
#
    $wgDBprefix = $wgDBprefix_tmp;
    $db2->tablePrefix($wgDBprefix);
#
		} else {
			throw new MWException( wfMsgHtml( 'farmer-error-exists', $this->_name ) );
		}
	}


public function createDatabase() {
		$this->_createTablesForWiki();
                //預設首頁建立失敗?
		//$this->_createMainPageForWiki();  
		$this->_populateInterwiki();

                //群組建立了, 但是使用者沒建立?
		$this->_populateUserGroups();
	}

其他

常見故障原因

  1. 主機上的temp路徑唯獨或沒有寫入權限
    在LocalSettings.php 另設 $wgTmpDirectory 變數, 給它一個權限為755的路徑
  2. 主機上的PHP因為預設啟用魔術引號功能?
    在 .htaccess 加上 php_flag magic_quotes_gpc Off
  3. 圖檔上傳失敗
    images下的所有資料夾不是777權限,圖檔會先寫到/images/lockdir再複製到對應的資料夾