January 19, 2004

PmWiki安装全攻略 [Tech ]

pmwiki   昨天说到已经将我的主页改为PmWiki的构架,刚才忙活了一晚上,终于全部搞定了,于是写下来。

  PmWiki简介:PmWiki是一个不需要数据库的以PHP为主要语言编写的wiki,遵循General Public License (GPL)协议,小巧方便,很适合个人网站用来制作规模不大的互动资源平台。

  我的安装平台:Windows XP Pro SP1 + Apache-1.3.* + PHP-4.3.*
  理论上可拖宽为:Windows + Apache/IIS + PHP
  本文不讨论PmWiki的使用问题,几乎任何使用上的问题都可以在其帮助文档中找到详细的说明,并且已经有人开始汉化这些文档了,还可以参见zhengPmWiki学习笔记

下载&安装

  1. 下载PmWiki的最新版,我使用的是目前最新的0.5.27版:pmwiki-0.5.27.zip
  2. 解压缩至目标文件夹,或解压缩之后FTP上传到你的服务器的相应目录。
  3. 无需任何配置,直接使用浏览器访问pmwiki.php,如果一切正常,应该看到一个默认的欢迎页面说你已经安装成功了。

  呵呵,就是那么容易上手。不过要在windows下能够完全使用PmWiki,并且让他对于简体中文有良好的支持的话,还必须进行一些必要的设置。接下去的工作稍微有点繁琐。

  默认的PmWiki需要Web服务器开启PATH_INFO,以支持类似http://www.xdanger.com/index.php/Main/HomePage 这样的URL美化。关于为何要以这样的形式表现URL,PATH_INFO的具体介绍以及如何在IIS上利用PHP支持PATH_INFO,可以参考车东的文章:“Search Engine Friendly的URL设计”。虽然PmWiki会自动测试服务器是否开启PATH_INFO而输出不同的URL格式,但是强烈建议你尽量开启使用这一功能,原因还是参见车东的这篇文章。

  PATH_INFO是一个CGI 1.1的标准,在Apache 1.3.*上默认开启,但是在Apache-2.*上默认是不开启的,需要在http.conf中的相应位置设置

AcceptPathInfo on

如果是虚拟主机用户的话,只能期望于你的Apache在你web目录下设置了

AllowOverride FileInfo

这样就可以上传一个.htaccess的文件到pmwiki的目录下,内容为

AcceptPathInfo on

否则就只能放弃这一功能。

配置local.php

  PmWiki允许你将配置文件单独存放于local/目录下,或者是PmWiki的根目录,命名为local.php(可以将scripts/sample-local.php移动到PmWiki安装的根目录或local/目录,改名即可)。这样可以避免直接修改pmwiki.php的主程序,以防升级时被覆盖掉。你可以将pmwiki.php内主程序之前的所有php内容(原版pmwiki.php的第29-210行)都复制出来,放在local.php内,并且以php标识符<?PHP ?>包裹起来(好的习惯是PHP三个字母大写,原因这里就不说了)。然后就可以在local.php内修改一些参数。以下只介绍常用的一些:

  • $WikiTitle :所有页面的<title></title>都会以这个字符串开始。可以放上网站的名称,我的就是:+:xdanger:+: :-)。
  • $ScriptUrl :pmwiki.php的URL。可以填:
    $ScriptUrl = 'http://'.$HTTP_SERVER_VARS['HTTP_HOST'].$HTTP_SERVER_VARS['SCRIPT_NAME'];
    如果是PHP 4.1.0+的话,建议使用:
    $ScriptUrl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
  • $ScriptDir :如果你修改过$ScriptUrl,那就必须增加次项:
    $ScriptDir = preg_replace("#/[^/]*\$#","",$ScriptUrl,1);
  • $WikiImgUrl :默认左上角Logo的图片路径。
  • $DiffKeepDays :页面修改历史的保存天数。
  • $WikiDir :自定义页面的存放路径。
  • $WikiLibDirs :默认存在的页面的存放路径,此项和$WikiDir分开设置是为了防止升级时覆盖已有页面。如果你在上面修改过$WikiDir,那就必须设置此项:
    $WikiLibDirs = array(&$WikiDir,"wikilib.d");
  • $SysDiffCmd :这个参数和以下的$SysPathCmd在Windows下必须修改,后文会提到如何配置。
  • $SysPatchCmd
  • $DefaultPasswords :密码的概念有点复杂,详细的文档可以参考PmWiki的帮助文档,这里有一个汉化的版本
  • 还有一些页面显示的参数,基本都很容易看懂。

解决Windows下Page Revisions无效

  关于这个问题的解决,完全参考了王建硕的文章:PmWiki Successfully Installed on Windows 2000。不过由于是英文的,我再简单地描述一遍。

  情况:随意编辑一个页面,保存,然后在页面的右上或左下有一个"Edit Page"的连接,进入后随意编辑,保存。然后点Page Revisions,看到的都是一个空的表格。再多编辑几次,这页始终都是一个个空的表格,只有日期,并没有页面修改的历史记录,而正常的情况应该是这样的。不能显示编辑记录当然就不能随意开放编辑权限,否则辛辛苦苦整理的东东随时可能被人家有意或无意地删除掉而不能恢复。不开放编辑功能就不能谈得上是Wiki了。不过还好,这个问题还是比较容易地解决了。

  1. sf.net下载GNU的Win32版本。快捷链接:diffutils、 patch
  2. 双击下载的diffutils-2.8.1-3-bin.exe安装。建议修改默认的安装目录
    C:\Program Files\GnuWin32\
    C:\GnuWin32\
    这些*nix转化过来的程序最好绝对路径中都不要包含空格,否则基本都会出错。这个也不例外,虽然可以成功安装,但是等一下还是无法使用。
  3. 将下载的patch-2.5.4-3-bin.exe更名为patch.exe放到C:\GnuWin32\bin\下。
  4. 设置local.php,加上刚才没有设置的 $SysDiffCmd 和 $DefaultPasswords :
    $SysDiffCmd = 'C:\\GnuWin32\\bin\\diff.exe';
    $SysPatchCmd = 'C:\\GnuWin32\\bin\\patch.exe';

解决与简体中文的不兼容

  关于解决这个问题,可以参考这篇文章:http://www.pmichaud.com/wiki/Cookbook/ChineseSupportGB2312

  主要就是内建的换行符需要改一下,修改pmwiki.php,他的是按照0.5.5版的,我稍加修改了几个函数,行号对应于0.5.7版,步骤如下:

  1. Line 207~209:
    $Newline = "\262";
    $KeepToken = "\263";
    $LinkToken = "\264";
    改为
    $Newline = "\x81"; //$Newline = "\262";
    $KeepToken = "\x82"; //$KeepToken = "\263";
    $LinkToken = "\x83"; //$LinkToken = "\264";
  2. 新建函数Patch_GB2312()和Patch_BackOld():
    function Patch_GB2312($pagefilename){
     global $Newline,$KeepToken,$LinkToken,$WikiLibDirs;
     if (file_exists($WikiLibDirs[1]."/".$pagefilename)&!file_exists($WikiLibDirs[0]."/".$pagefilename)){
      $Newline = "\262";
      $KeepToken = "\263";
      $LinkToken = "\264";
     }
    }

    function Patch_BackOld(){
     global $Newline,$KeepToken,$LinkToken;
     $Newline = "\262";
     $KeepToken = "\263";
     $LinkToken = "\264";
    }
  3. 修改HandleBrowse()的Line867 和HandleEdit()的Line 890:
    if (!$page) {Abort("Invalid page name");}
    改为
    if (!$page) {Abort("Invalid page name"); } 
    Patch_GB2312($pagename);
  4. 修改Line 897:
    $HTMLTitle = "Edit $pagename";$GCount = 0;
    改为:
    $HTMLTitle = "Edit $pagename";$GCount = 0;
    Patch_BackOld();
  5. 最后别忘了在$HTTPHeaders(如果local.php里有的$HTTPHeaders话,在local.php里修改)中,将charset设为gb2312。

  这个方法不适合UTF-8的编码方式。

Posted by xdanger at January 19, 2004 03:24 AM | TrackBack
TrackBacks
TrackBack URL for this entry: http://blog.xdanger.com/script/trackback.pl/85
Comments

我想请教密码设定的方法
整个pmwiki的与单个页面的密码设计方法
我看了资料说,整个pmwiki的密码需修改pmwiki.php文件或local.php文件,
单个页面用?artic=attr,
但我不知该怎样操作?

Posted by: ququ at February 6, 2004 09:46 AM

PmWiki有四种密码:
  1.admin。控制全部页面,覆盖全部组和页面的密码,一般不要设置的,设置的话其他密码就没用了。
  2.read。察看页面的密码。
  3.edit。编辑页面的密码。
  4.attr。可以修改组或页面的read和edit密码的密码。就是说在URL后面跟?action=attr,然后用attr的密码登陆,就会出现修改read和edit密码的页面。一般应该在local.php内设置该密码,以防有人修改单独组或页面的attr密码。

  PmWiki的密码覆盖规则为:单独页面的read/edit/attr密码>该组的read/edit/attr密码>local.php中的read/edit/attr密码;local.php中admin密码覆盖所有页面和组的所有密码。

Posted by: xdanger at February 6, 2004 03:31 PM

xdanger,按照你的方法,pmwiki支持中文了。在使用wiki的过程中,我碰到了一个比较奇怪的现象。当初安装pmwiki时,发现它奇慢无比(不是网速原因),要五六分钟才能把pmwiki首页打开,其它的编辑什么的也是一样的慢。于是去研究了一番phpwiki,好象比pmwiki要快点。网上找到的资料和大家反映的都是pmwiki还是比较适用。弄了几天,后来发现是防火墙的问题,我把NIS(norton internet security)关掉后,打开我的wiki和打开大家的pmwiki速度一样的快,而打开NIS则是非常的慢。而且在linux下,把防火墙开着也一样打不开我的wiki。而无论开防火墙与否,我上大家的pmwiki,都是相当的快。真的不知道是什么原因,是因为php文件的原因,我的服务器主机设置问题还是什么其它问题,请教。

Posted by: xiongzm at February 12, 2004 08:54 AM

看上去好像是pmwiki在ip反解析,不过我刚才看了一下源文件,没发现有这样的函数,而且网上也查不到任何pmwiki有反解析的功能。而且如果单纯是访问网络资源的话,NIS应该是弹出一个对话框确认的啊。网站上其他的php在NIS开着的情况下是否能正常运行呢?Apache本身也有反解析功能,是不是Apache的虚拟主机设置不当?

Posted by: xdanger at February 13, 2004 11:47 AM

差!明显不会用NIS,NIS的隐私保护是不提示的!

Posted by: Dash at March 31, 2004 11:04 AM

请问设置密码后,在输入密码中会出现“用户”栏,这一栏怎样解决呢?刚刚安装pmwikin,密码设置参考的是安装文档中的简单样例。

Posted by: jun at April 7, 2004 05:03 PM

不用管用户名框的,直接填密码。
还有你上次问没设置密码为什么还是会弹出对话框来,这个我也不清楚,我装的是0.5.7版的,现在好像是0.6.9版了,不知道改动了什么地方。不过你先确定一下肯定是在local.php里没设置密码,而不是pmwiki.php

Posted by: xdanger at April 10, 2004 06:05 PM

其实之前我有阅读所有的英文安装文档,之后也参考了部分中文翻译。这里介绍的解决“修改比较”bug也解决了。
可是不论我有没有在配置文件中加密码,用action=attr区去访问都是需要我输入密码,而且不论是否设置明码或密码,都不可以进入attr设置。

Posted by: jun at April 11, 2004 11:16 PM

我安装号了pmwiki,可是有几个问题不明白:
1.为什么我的编辑页中显示的是英文,象那些排版的规则全部都是英文的,这样才能换成中文的呢?
2.我不清楚这样排版?为什么我上面的字那么大,没有达到我的要求,不知道怎样才能实现那些字体的大小?
3.如果我多需要几个网页,不知道怎样才能实现,是不是把pmwiki.php复制一下,再来修改链接呢?

谢谢你的回答,谢谢!!

Posted by: at August 12, 2004 05:35 PM
Post a comment









Remember personal info?