Kros Dai’ Blog No excuse, no panic

PmWiki安装全攻略

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的编码方式。

This site is licensed under a Creative Commons License .