决定投身web和互联网。最近一段时间,借着给老师搭建一个介绍研究成果的网站,从wordpress,到Ruby on Rails,到wiki类的网站都试了一遍,这次是对mediawiki的尝试。
Mediawiki目前支持多种语言,当然对中文支持也是非常不错的。以下是Mediawiki的一些特点
1、php+mysql,
2、安装简单,mediawiki考虑到了各类群体,所以安装非常简单。只要你认真填写mysql数据库配置信息,很容易就安装上了。
3、全世界最大的wiki项目维基百科全书是使用mediawiki的成功范例,数据量、访问量都超级庞大。4、程序功能丰富,可以满足简单到高级的wiki网站制作。
Mediawiki上官方安装教程:www.mediawiki.org/wiki/Installation ,以下是个人的安装经验:
系统前提:Ubuntu 12.10
前置条件:
Web服务器:apache2 server(sudo apt-get install apache2)
PHP语言:php (sudo apt-get install php php-mysql)
数据库:mysql(sudo apt-get install mysql-client mysql-server)
备注:当然上述的除了php没的选,web服务器(apahce,iis,nginx,lightttpd)和数据库(msysqk,PostgreSQL,Sqlite3,Oracle,ms sql server)都是具有多个选择的。
前置条件的安装可以详细参考“关于wordpress”
下载mediawiki的tar包(http://www.mediawiki.org/wiki/Download)
wget http://releases.wikimedia.org/mediawiki/1.22/mediawiki-1.22.6.tar.gz
解压,修改文件名(去掉版本号)
tar xvf mediawiki-1.22.6.tar.gz
mv mediawiki-1.22.6/ mediawiki/
并将其放到apache2的服务器主目录下(/var/www)
sudo mv mediawiki/ /var/www/mediawiki
在浏览器中输入http://[domain]/mediawiki/,domain可以是域名或直接的ip地址,比如 http://222.42.14.9/mediawiki/
此时看到的如下的页面:
点击set up the wiki,进入安装页面,选择安装配置所有的语言,这里都选中文简体(zh-hans):
单击继续之后,看到环境配置的警告:
备注:这里暂时忽视这些警告,并且像对象缓存这样php插看只是对流量巨大的网站有用,我搭建的这个小网站不太可能需要这些插件。
下一步是,配置数据库,这里使用的是mysql,需要填写的字段如下:
然后是名称配置:
最后,是一些选项的设置,例如版权和许可证,电子邮件设置,扩展,文件上传之类的。由于是第一次安装,设置了简单的版权,勾选了一些关于扩展方面的选项(随后通过修改配置文件更改),启动了文件上传:
然后,就可以等待安装。最后,配置成功后界面如下:
此时,需要将下载的LocalSetings.php保存到mediawiki目录下(例如,/var/www/mediawiki).
备注:配置结束后,在浏览器中输入http://222.42.14.9/mediawiki/,看到[185f5321] 2014-04-30 03:06:57: Fatal exception of type MWException
解决方法:
在mediawiki目录下的localSettings.php 文件末添加下行代码即可:
$wgLocalisationUpdateDirectory = “$IP/cache”;
注意:“$IP/cache”中的引号是英文引号,不是中文引号。
安装成功的截图:
此时,可以使用配置过程设置的用户登录。
在上述安装中,注意以下内容,以便升级时使用:
Site name:你的wiki站点名称。注意:这与网站本身的名字空间有关,建议使用简短的英文(以后可修改)
Contact e-mail:站长的联络邮件
Language:语种选择。建议选择zh-cn简体中文或zh-tw繁体中文;没必要就不要选支持繁简体自动转换的zh中文,否则此后网站提示的本地化工作量将增加很多
Copyright/license medadata:版权类型。其中GNU为公开的自由版权,允许他人复制、修改;不确定该用什么版权时选no license metadata
Sysop account name:站长的名字。这是建立wiki后的第一个管理员用户,以后无法改名。可考虑使用英文名字
password:站长的密码
Shared memory caching:网站缓冲机制,可以不选
MySQL server:填写空间服务商提供的MySQL服务器名称,一般为localhost
Database name:数据库名称,根据与空间服务商的约定填写
DB username:数据库用户名
DB password:数据库密码
Database table prefix:数据表前缀。在同一数据库中架设多个wiki时需要。
DB root password:数据库root密码。(可忽略)
Mediawiki的配置文件分两处:1.includes/DefaultSettings.php-系统默认的配置文件 2.LocalSettings.php 用户设置的配置。主要在LocalSettings.php中进行设置和覆盖相应配置,而不是DefaultSettings.php。
想要将左上角的mediawiki图标替换为自己的图标,可以在skins/common/images/目录下找
到名为“wiki.png”的图片文件,将它替换为自己的图片即可。
当然也可以采用编辑$wgLogo变量的方法,下面是个人使用的方法。
寻找logo图片,找到的图片(bug.jpg)如下:
将其放到/var/www/mediawiki/images/目录
编辑/var/www/mediawiki/LocalSettings.php,在文件末尾添加:
$wgLogo="/mediawiki/images/bug.jpg";
注意, images是上传文件的图片存放的目录,bug.jpg是通过浏览器远程传到服务器上的。在上传的过程中出现了问题:Could not create directory “mwstore://local-backend/local-public/1/11
在查看参考7后,找到解决方案,需要将mediawiki下的images的文件的权限修改:
sudo chown -R www-data:www-data images/
此时,就可以正确的上传文件了。关于文件上传的更仔细的介绍参考:http://www.mediawiki.org/wiki/Manual:Configuring_file_uploads#Prerequisites。
启用Mediawiki的上传功能
$wgEnableUploads = true;
这样就启用了MediaWiki的上传功能,当然如果在上面的安装过程中设置了文件上传功能,可以看到配置文件中默认将其设置为true。
MediaWiki上传图片
上传页面的地址是: Special:Upload ,也可以先进入特殊页面,然后进入上传文件页面。在该页面中上传图片,设置好文件名和描述,上传成功以后就可以在文章中使用了。
MediaWiki使用图片
在要插入图片的位置输入:[[Image:file.jpg]]
就可以显示对应的图片了。
限制上传文件大小
默认DefaultSettings.php中上传文件的大小为100MB,如需设置可以在LocalSettings.php增加下面一行
$wgMaxUploadSize = xxx; #单位为字节。
备注:上传文件的大小本身受到php环境的限制,即/etc/php5/apache2/php.ini中的post_max_size和upload_max_filesize变量的值。Mediawiki中上传限制的大小的取值顺序为:post_max_size>=upload_max_filesize>=$wgMaxUploadSize。如果php环境中设置的值比较小,$wgMaxUploadSize设置的再大也没有用。修改php.ini后,需要重启apache服务器(sudo /etc/init.d/apache2 restart)。
引用外部图片
在localsettings.php增加下面一行即可(可能引起安全问题):
$wgAllowExternalImages = true;
通过图片URL进行上传(使用可被公开访问的图片链接进行远程图片上传,不过只有操作员才可以用,这是出于安全性考虑)
在localsettings.php增加下面一行(可能引起安全问题,建议不要这么做):
$wgAllowCopyUploads = true;
开启其他文件上传,比如doc,pdf,ppt,docx,pptx
打开mediawiki根目录中的includes/DefaultSettings.php,查看$wgFileExtensions ,此变量默认仅支持'png', 'gif', 'jpg', 'jpeg'四种,这意味着可以上传的文件只有这几种,但是可以在LocalSettings.php中设置,添加如下行(建议不要直接修改DefaultSettings.php):
$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg','doc','ppt','pdf' );
上传过程出现错误提示 “该文件包含或具有一个不正确的扩展名。请检查此文件并重新上传”,比如,已经在wgFileExtensions中设置了允许上传ppt类型,还是上传不了。在wiki根目录中LocalSettings.php中添加如下一行:
$wgVerifyMimeType=false
当然,也可以直接修改includes/DefaultSettings.php,将$wgVerifyMimeType修改为false;但是不建议这样做。备注:此时,Mediawiki但会把pptx当zip处理,word,ppt都是正常的。
进入特殊页面,找到sidebar进入,编辑该页面设置导航栏。
备注:由于安装的是中文版,在特殊页面中找了半天都没有看到导航栏(sidebar)。后来试了直接链接MediaWiki:Sidebar(比如,像这样http://222.42.14.9/mediawiki/index.php/MediaWiki:Sidebar),才看到了sidebar的页面。
点击页面进行编辑,修改格式如下:
格式:
*导航栏名称一
**链接一地址|链接一名称
**链接二地址|链接二名称
*导航栏名称二
**链接一地址|链接一名称
**链接二地址|链接二名称
这里是样例导航栏:
* navigation
** mainpage|mainpage
** http://bbs.zzbaike.com|论坛
** currentevents-url|currentevents
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help
*推荐网站
** http://www.idcspy.com|美国主机侦探
** http://www.alexacn.org|Alexa中文资讯
** http://down.zzbaike.com|站长下载
** http://site.zzbaike.com|站长网址
** http://edu.zzbaike.com|站长学院
备注:一定要严格按照格式,如果仅仅填写链接地址不注明名称是显示的,我一开始就因为这种事情郁闷了老半天。
MediaWiki的大部分界面信息存放在Special:Allmessages里面,包括界面的文字、链接、气泡提示、热键等。进行定制时,请找到相应信息,点击左栏链接进行修改。
Mediawiki的皮肤文件存放在mediawiki主目录下skins文件夹(/var/www/mediawiki/skins)下。一般来说,皮肤包中包含xxx.php、xxx.deps.php与xxx目录这三部分(mediawiki自带的皮肤没有xxx.deps.php文件,xxx表示特定的皮肤名)。
将上述文件(xxx.php、xxx.deps.php与xxx目录)拷贝到skins目录下.然后使用创建时的用户名登录,进入参数设置(Special:Preferences)页面,在皮肤中选择后保存即可。
注:非注册用户无法选择皮肤,且皮肤的选择仅仅和登录用户相关连。
如果希望皮肤能对所有用户都生效,那么可以在将其设为默认皮肤,之后匿名用户等都将默认使用这种风格。打开LocalSettings.php,在文件末添加如下行:
$wgDefaultSkin = “monobook”;
备注:这里使用的是系统自带的monobook皮肤,可以成用户上传的其他任何皮肤。
利用搜索功能创建新页面,例如在左边栏中搜索“超人”,搜索结果如下:
在最下方的提示中点击“超人”的链接建立一个关于“超人”页面。
Wiki页面的正文中存在棕红色的链接,则表明该条目中还没有内容,可以点击它来编辑新的条目,保存后就自动创建新页面。比如,下图中棕色的连接就是还没有创建的页面。
如果需要自行建立新页面,请随意编辑某个页面并输入“[[新条目名称]]”,点击“显示预览”按钮后即可按前面所述进行操作。当然,这可以通过上面的通过搜索创建新的页面。
mediawiki中的缩进不能使用半角空格调整。有以下几种方式控制缩进格式缩进:(举例附后)
行首使用半角:号:允许多个半角冒号连用,以控制不同文本缩进深度
行首使用半角*号:行首星号是列表控制符,产生列表的同时伴有不同的文本缩进。允许多个星号连用。
行首使用半角#号:数字序号的列表控制符,与星号类似。注意,多个#号行中夹有非#号起始的文本行时,数字序号会中断。
使用;与:号配合:分号与冒号称为“定义列表”控制符,冒号之后的部分换行缩进显示。
行首使用全角空格:一种非正规手段,不要滥用。
'''粗体文字'''
''斜体文字''
[[链接标题]] 内部链接
[http://www.example.com 链接标题] 外部链接
== dfd == 二级标题字导航
==== dfd === 三级标题字 以此类推
[[Image:Example.jpg]] 嵌入文件
使编辑的时候出现虚线框,使重要的内容显示比较醒目,只要在开头加上一个空格就可以了(这里的空格必须是半角下的才可以
wiki文本中,单独回车并不会出现换行。强制换行可以如下手法:
1、增加空行会分开不同的段落
2、在换行位置使用强制换行标签“br”
如果需要段与段之间的空行,只需在前段末尾加上"br”"br",将“换为<>。
关于首行空两格
如果遵循中文书写习惯,需要在首行前空两格,可以在首行前端输入“全角”的空格符(一直不知道全角有什么用处)。
1、当图片位于本机(没有网址可供调用)时,需要将图片上传后才能使用。(该页面的链接可在“特殊页面”中找到,标注为“上传文件”,在左侧的工具箱中也可以看到)。注意:图片文件不能使用中文名称,应在上载时指定为英文名称。
3、将图片上传后,在需要插入图片的位置输入“[[Image:Filename.jpg]]”即可(Filename为上传图片的文件名),即可出现如,如果需要添加方框效果,可以输入“[[Image:Filename.jpg|thumb]]”添加图片方框。
3、对于上传到本站的图片,还可以随意指定显示大小、左右位置、添加说明文字等,请参看Mediawiki中图像的使用。
当文章中含有3个以上标题时,mediawiki将自动在第一个标题之前生成目录(这是默认的设置)。
如果需要隐去目录,可以在文章中加入“__NOTOC__”标记;
如果需要强制显示目录而不管标题数量,可以加入“__TOC__”标记;
这两个wiki标记不限制出现位置,但一般出现在文章头部或尾部且单独成行。
示例如下:
{|
| 第1行第1列 || 第1行第2列 || 第1行第3列
|-
| 第2行第1列 || 第2行第2列 || 第2行第3列
|-
| 第3行第1列 || 第3行第2列 || 第3行第3列
|}
说明:“{|”、“|}”是表格的头尾,“|-”代表表格换行,“|”引导表格行内容并以“||”分开不同单元格
注意:表格控制符必须在行首书写!非行首表格代码将不被认可
单元格内容可包含链接、图片等,以及嵌套内部表格。
mediawiki的默认表格没有边框,如果需要的话需添加参数。(见下文介绍)
border="1" cellspacing="0" 是边框样式,不写的话就不出边框
让一行、一列或一整个表格都是同样的颜色
{| style="background:yellow; color:blue" border=1
|-
| 这行是
| 蓝字
| 黄背景
|- style="background:navy; color:white"
| 这行是
| 白字
| 深海蓝
|-
| 这行
| style="background:white" | 比较
| 不一样
|}
漂亮的页面布局,离不开各种边框的使用。通过不同样式的边框,可以让不同的内容板块一目了然,有效改进页面的可读性。
边框样式的基础实现有两种:
div边框
表格边框
<div style="width:100px;background-color:#FF0000;border:5px solid #FFFFFF;">
测试
</div>
solid单线边框
border:1px solid #808080
常用边框之一,推荐
dashed虚线边框
border:1px dashed #808080
常用边框之一,推荐
double双线边框
border:3px double #808080
常用双线边框之一,推荐
分类是mediawiki中一种重要的内容关联手段。分类将同类文章在同一个页面上集中起来,为读者提供查看相关资料的方便
mediawiki的分类还有上、下级关系,使内容关联更有层次。在被编辑的文章中添加[[category:XXX]]保存之后这篇文章就会自动被分类为XXX。
分类说明文本一般被放在文章末尾,但实际上它可以位于文章的任何部分。此外,分类页面中也可以进行编辑,以进行必要的说明。
一篇文章可以有多个分类,顺序书写即可。例如文章同时在XXX、YY分类中出现:
[[category:XXX]]
[[category:YYY]]
引用分类页面
在mediawiki文章中链接分类页面正确的写法是[[:category:XXX]],显示时不会显示前导冒号
上传图片也可以分类
通过对上传图片的分类,可以让更多人了解系统中有哪些图片,方便在文章中引用,并大量减少重复图片的上传。上传图片之后,编辑该页面并输入[[category:分类名称]]然后保存,则访问这个分类页面时就能看见该图片的索引了
引用模板 {{模板名称}}
创建或者编辑模板 [[Template:模板名称|页面显示文字]]
例如:设置针对条目的讨论内容显示的模板
在页面下方增加一个名为{{讨论}}的模板,模板内容你可以参考模板:讨论
{| style="width:100%; border:1px solid #cef2e0; background-color:#f5fffa;"
| style="background-color:#f5fffa;"|'''用户留言:'''
|-
| style="background-color:#ffffff;"|{{#ifexist:{{TALKPAGENAME}}|:
{{ {{TALKPAGENAME}} }}|目前暂无留言}}
|-
|[{{fullurl:{{TALKPAGENAME}}|action=edit§ion=new&preload=Template:Sign&editintro=Template:SignNotice}} 新增留言] [{{fullurl:{{TALKPAGENAME}}|action=edit}} 编辑留言]
|}
<noinclude>[[Category:模板]]</noinclude>
如果模板不支持ifexist,需要安装模板扩展语法扩展.Extension:ParserFunctions
http://www.mediawiki.org/wiki/Extension:ParserFunctions
加姓名与日期,增加~~~~
在LocalSettings.php的位置加入:
#Prevent new user registrations
$wgWhitelistAccount = array ( "user" => 0, "sysop" => 1, "developer" => 1 );
此时用户无法自助注册。管理员可以到登录页面(Special:UserLogin)里,输入一个用户名和email,然后点击“by email”,系统创建帐号并将随机密码发送到指定email里。
在LocalSettings.php加入以下等式右侧的值决定各组成员的权限。左侧第一方括号内的'*'代表包括匿名用户在内的所有成员。登录用户控制存放在'user'组,这些将综合决定user_groups数据表中的成员权限。(适用1.5版本)
这些设置取代了以前的wgWhitelistAccount和wgWhitelistEdit。
#$wgGroupPermissions = array();
$wgGroupPermissions['*' ]['createaccount'] = false;
$wgGroupPermissions['*' ]['read'] = true;
$wgGroupPermissions['*' ]['edit'] = false;
以上例子中禁止了匿名用户的自行创建账户和进行编辑。(“编辑”标签仍会显示,但匿名用户点击时会被提示要求进行登录。
设定匿名用户(未登录)可以看到的页面
上述设定之后,用户连首页和登录页面也看不到了。因此需要继续修改在LocalSettings.php中加入:
$wgWhitelistRead = array ("Main Page", "Special:Userlogin", "Wikipedia:Help");
这样,匿名用户只能看到Main Page、登录页面以及帮助页面。注意根据自己站点的情况修改上述设置,例如改为:
$wgWhitelistRead = array ("首页", "Special:Userlogin", "某某Wiki:Help");
对于多字节语言(例如中文),PHP parser可能不能正确解码。这时可能要用到PHP的urldecode()函数来转换一下:
#中文的“首页”编码
$wgWhitelistRead = array( urldecode("%E9%A6%96%E9%A1%B5") ;
以管理员(sysop)身份登录,点击页面上方的的保护(或protect)标签。如下图,选择第三行的(仅允许管理员)Sysop only,然后确认即可。
保护完成后,该页面只能被sysop(管理员)修改。
如果仅仅希望屏蔽匿名修改,则请选择第二行。这种情况下允许登录用户、管理员对该页面的编辑。
解除保护:操作过程完全类似。
注意:页面保护仅适合少量页面的保护。如果希望所有页面都禁止匿名修改,则请参考mediawiki的用户权限,对匿名用户的权限进行限制。
RSS扩展可以在页面中嵌入新闻内容,还比较实用、方便。
下载安装media wiki的RSS newsfeeds插件:
http://www.mediawiki.org/wiki/Extension:RSS
将代码安装到mediawiki的extensions目录下,并且LocalSettings.php中添加如下行启用插件:
include(”extensions/rss.php”); #rss.php为插件的文件名
插件需要php的rss解析器的支持,比如
magpie rss parser :http://magpierss.sourceforge.net/
默认情况下,magpie显示中文会有乱码,需要将编码显示设置为utf-8,另外为了改善性能,可以修改默认的缓存设置。当然,可以通过iconv库将中文gbk转码为utf-8,检查iconv是否安装,通过phpinfo来进行测试。Iconv的下载地址 http://www.php.net/iconv,Ubuntu/Debian下通过apt-get install iconv安装。
在rss.php中添加,还是在LocalSettings.php中添加,这里不是很清楚:
require_once("rss_fetch.inc");
// specify output encoding default is ISO-8859-1
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');;
define('MAGPIE_FETCH_TIME_OUT', 60 * 180);
注意:两个define语句一定要紧跟在requrie后面,加在rss.php的文件头,怎么也不生效.
页面引用示例:
[http://news.google.cn/news?hl=zh-CN&ie=UTF-8&q=苏州 苏州 - Google资讯] <rss>http://news.google.cn/news?hl=zh-CN&ie=UTF-8&q=苏州& amp;amp; amp;output=rss|charset=UTF-8|short|max=8|title=none</rss>
实例如下(不知有何用处?):
<eventcountdown>
<eventcountdown date="8-8-2008"><daysuntil in="days">8-8-2008</daysuntil></eventcountdown>
example:
'''T27L Internal ER date is 8/20/08,离现在还有<font color="#ff0000"><eventcountdown date="20-8-2008"><daysuntil in="days">20-8-2008</daysuntil></eventcountdown></font>'''
Mediawiki自带的编辑器很丑很难用,打算换个编辑器,在参考6中看到FCKeditor编辑器,按照其中给定的地址去看了一下(http://mediawiki.fckeditor.net/index.php/Main_Page#Download_it.21)。发现,其不再开发了,扩展推荐另外的两款编辑器,其中有一个是wikieditor,看名字很霸气,就安装了一下。
Wikieditor在mediawiki 1.18之后随着随着分发包一起发布的,都不需要下载,配置一下就能使用。
在LocalSettings.php中添加如下的配置:
require_once "$IP/extensions/WikiEditor/WikiEditor.php";
# Enables use of WikiEditor by default but still allow users to disable it in preferences
$wgDefaultUserOptions['usebetatoolbar'] = 1;
ww$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;
然后,刷新浏览器就可以使用了。更多细节参考:http://www.mediawiki.org/wiki/Extension:WikiEditor
对比一下两个编辑器就可以看到默认的编辑器的简陋了:
默认编辑器:
Wikieditor:
在LocalSettings.php中设置$wgCacheEpoch全局变量,强制现有缓冲过期(参见DefaultSettings.php)
$wgCacheEpoch = 'date +%Y%m%d%H%M%S';
个人感觉PHP开发网站还是比较强大的。比如,搭建网站这件事情,到底是从头开始打造还是直接采用别人的解决方案,需要时进行定制。像我这样的懒人,更倾向拿来主义,有的用何必自己闭门造车,不到万不得已,坚决不自己编程。
虽然还没有正式踏入web开发的大门,大体上我还是知道一些东西的已有的解决方案,比如:
论坛类的:DISCUZ!和phpwind
博客类:wordpress
Wiki类:mediawiki,twiki
Web开发框架: Ruby on Rails, Python的Django和Zope,Java的SSH(Struts Spring Hibernate),NET的MVC
JavaScript UI框架: Yahoo User Interface(YUI),JQuery,Extjs
博客第一部分是自己边安装边记录的,第二部分主要参考了参考6,并进行一些修改和添加,由于博客的排版问题,照例提供一个pdf的格式:http://pan.baidu.com/s/1eQzg5ay
1.站长百科上的MediaWiki文档:http://www.zzbaike.com/wiki/MediaWiki
2.编辑wiki:http://blog.csdn.net/gtuu0123/article/details/4287389
3.安装Mediawiki:http://blog.csdn.net/gtuu0123/article/details/4287278
4.Wiki类似程序汇总:http://blog.csdn.net/gtuu0123/article/details/4287212
5.Mediawiki官方网站:http://www.mediawiki.org/wiki/MediaWiki
6.Mediawiki使用:http://blog.csdn.net/gaogao0603/article/details/7689670
7.mediawiki安装错误:Fatal exception of type MWException
8.Could not create directory “mwstore://local-backend/local-public/x/xx