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

我的城市,我的汽车站。

  昨天看了王建硕在主页上做了一个名叫“我的城市,我的汽车站”的计划,感觉非常好玩:http://home.wangjianshuo.com/scripts/pmwiki/pmwiki.php
马路西(南)方向站牌 马路东(北)方向站牌

  当有更多的公交站加进来的时候,我们就可以把公交车站的站牌当作城市的坐标,我们通过离自己最近的公交站牌就组成了线下(offline)的社区,可以相约打打球,喝杯咖啡什么的,也是一种前卫的交际方式。。。。

  这句话可以说令我茅塞顿开。我们做个人主页,写Blog,搞wiki,说大了,就是追求一种前卫的交际方式,希望更多的人来了解自己,也给自己一个可以表现的舞台。他的这个创意不仅突破了网络上传统的交际方式——即时通信、Mail等,而且赋予了个人主页最富生命力的定义——追求高品质生活的工具。与GeoURL相比,内涵明显深了许多,给人很强的城市归属感。

  不知怎么的,特别欣赏这个创意。不过要作如此大量的数据统计,PmWiki是否可以承受也必须是一个需要考虑的问题。虽然PmWiki是一个相当好的小型社区式系统(今天我也把主页改成PmWiki了),但局限特别是访问量大了之后,所有页面都是动态输出,而且不是使用数据库的。正在考虑是不是能够做一个简单的系统来实现,希望能得到他们的支持吧……



使用Google工具栏显示PageRank

  以下文字的原文:http://pr.efactory.de/e-pagerank-implementation.shtml

  多数人通过Google工具栏开始了解PageRank。Google工具栏是Microsoft Internet Explorer的一个浏览器插件,可以在Google网站上下载到。Google工具栏提供的一些功能使搜索Google变得更为方便。

Google Toolbar  Google工具栏以0-10的刻度显示PageRank值。从显示栏中绿色部分的长度可以估计出当前正在访问的页面的PageRank值。如果用户将鼠标放于显示栏上,就是显示PageRank值。

  注意:显示PageRank值是Google工具栏的一个高级功能。如果高级功能被打开,Google就会收集用户信息。另外,工具栏会自动升级,用户无需关心。所以,Google可以访问用户的硬盘。

  如果我们进行一下计算,PageRank理论上拥有最大值(Nd+(1-d)),这里的N为互联网网页总数,d为通常被设为0.85,计算出的PageRank值和工具栏显示出的数值成一定的比例关系。普遍认同的是,它们之间的比例并非线性的,而是成对数关系。如果设阻尼系数d0.85而PageRank的最低值为0.15xdanger注:因为0.15+0.85=1),并且对数的基数为6,我们得到以下的比例关系:

Toolbar PageRank Real PageRank
0/10 0.15 - 0.9
1/10 0.9 - 5.4
2/10 5.4 - 32.4
3/10 32.4 - 194.4
4/10 194.4 - 1,166.4
5/10 1,166.4 - 6,998.4
6/10 6,998.4 - 41,990.4
7/10 41,990.4 - 251,942.4
8/10 251,942.4 - 1,511,654.4
9/10 1,511,654.4 - 9,069,926.4
10/10 9,069,926.4 - 0.85 × N + 0.15

  现在还不确定工具栏所显示的数值和实际的PageRank值是否严格遵循对数关系。看上去的确像遵循了对数关系,因此Google工具栏仅用了一个范围的刻度值就能显示所有页面的PageRank值。对数的基数被定在6-7之间,这一点可以由一个工具栏PageRank值大于4的页面的入链数量举例演算得出,这个连接数量可以从Google那用指令式的链接得到。



<< PageRank在Google搜索中的实现

PageRank在Google搜索中的实现

  以下文字的原文:http://pr.efactory.de/e-pagerank-implementation.shtml

  关于PageRank的实现,首先,重要的是PageRank怎样被Google综合考虑进网页的排序。Lawrencec Page和Sergey Brin在公开发表的文章中阐述了这个过程。最初,Google搜索引擎对于网页的排序由三个因素决定:

  • 页面的特定因素
  • 入链锚的文字内容
  • PageRank

  页面的特定因素包是指:网页内容、标题内容和文档的URL。根据Page和Brin公开发表的文章,很有可能有更多的因素已经影响到了Google的排序方式。但是这里我们并不关心。

  为提供搜索结果,Google根据网页的特定因素和入链锚的文字计算出网页的IR值,这个值被检索项在页面中的位置和重要性加权。用这个方法确定文档和搜索语句的相关性。然后此IR值结合PageRank值表示网页的基本重要程度。为了结合IR值和PageRank值,这两个值被相乘。很明显不可能是相加的,否则的话如果页面拥有一个很高的PageRank值,即使和搜索语句无关,也会在搜索结果中排在前面。

  尤其对于2条以或更多的关键词所构成的搜索语句,内容相关性对于评级标准的影响更大;相反地,PageRank主要对于非特定性的单个词作为搜索语句时造成显著的影响。如果webmasters的期望搜索短语有2个或更多的单词组成,那么可以使用传统的搜索引擎优化可以使他们的结果排在高PageRank的页面之前。

  如果网页需要为高竞争的搜索条件做优化,即使页面已经在传统的搜索引擎优化方案下很好地被优化了,要得到好的排名基本上还是需要一个高的PageRank值。由于为了避免受广泛重复关键词的垃圾页面干扰,IR值取决于文档中关键词出现的次数和入链锚的文字。因此,传统搜索引擎优化的作用就被限制了,而PageRank成了在高竞争的搜索条件领域内的决定性因素。



<< Google的PageRank算法(三) | 使用Google工具栏显示PageRank >>

PayPal帐户注册记录

PayPal  PayPal是全球最大的在线付款平台,使用网络刷卡方式,支持几乎所有国际通行信用卡,实现即时付款,是网上跨国交易最普遍的形式。同时又是收取服务费用最少的一个。

  要使用PayPal实现信用卡在线消费,必须注册一个PayPal帐号,并且验证你的信用卡。

注册帐号步骤:

  1. 登陆PayPal主页:http://www.paypal.com
  2. 点击右上角Sign Up进入注册页
  3. 选择Personal Account in:China,然后Continue。
  4. 然后就是常常看到的一些表单,出了一个Work Telephone之外都是必填项。
  5. 在你所填的邮箱中查收验证邮件,点击其中的一个验证连接激活你的邮件地址。PayPal虽然使用电邮地址登陆,但却支持邦定多个邮件地址,每注册一个都需要验证。

  这样就完成了帐号注册,不过要使用信用卡消费,还必须注册你的信用卡。



信用卡注册步骤:

  1. My Account -> Profile -> Credit Cards -> Add填写信用卡资料。Card Verification Number 是信用卡背面的最后三个数字Credit Card Verification Number配合信用卡的卡号,任何人都可以从网上刷走你的钱。所以一定要在受信赖的网站才能填写这些资料。并且容易被我们忽视的是,一定要注意信用卡卡号的保密,这个就像CD-Key或手机冲值卡的密码一样,几乎起到证码的作用,而不只是一个编号。
  2. 注册信用卡之后,PayPal会向您要求从你的卡中扣除$1.95,这个是用来验证你的信用卡的确可以透支并适合在网上使用。不用担心这$1.95,因为在全部注册完成之后PayPal会将它退还给你。这步确认就可以了。
  3. 如果你的信用卡颁发机构支持在线查询的话,过1-3个工作日,你就可以在网上查到一笔美元刷卡交易记录,如下图所示(因为我注册了2张卡,所以有2条记录):4-digit Expanded Use Number
    圈出来的就是交易验证码,在My Account -> Profile -> Credit Cards中选取信用卡然后点Complete Expanded Use Enrollment:
    然后填入那4位注册码,提交后就OK了:
  4. PayPal支持每个帐户拥有多张信用卡,申请步骤一致。

  这样就算基本完成了。可以轻松实现网上付款,比如在eBay购物,而不必再为如何跨国付款及人民币-美金结算问题伤脑筋了(前提是信用卡颁发机构具有美金消费人民币还款业务),因为多数网上商家都支持PayPal支付。你还可以和远在异国的亲朋好友寄款/收款。

  唯一遗憾的是,PayPal只支持少数几家美国银行的转帐汇款。对于我们来说,PayPal只能消费而无法将收到的钱提现,收到的钱是放在你在PayPal的帐户里的,而并非直接转入信用卡,要么你在美国有熟人,否则这些钱最好的办法就是在网上消费掉。因为信用卡消费是有国际惯例的。比如你是Visa卡,就可以在全世界有Visa标志的POS机上刷卡或ATM机上提现,因为这些发Visa卡的机构都和Visa有清算协议,PayPal只是虚拟化了这一刷卡过程。同理,你不可能跑到全世界任意一个颁发Visa卡的机构去向你的信用卡存钱,所以PayPal上也不行。

  我在写这篇Blog的时候完成了信用卡验证,你现在也试试看吧,然后点击下面的图标按钮向我捐点$,呵呵。

This site is licensed under a Creative Commons License .