PmWiki 介绍与选型指南
PmWiki(PHP 文件型 Wiki 引擎)的架构、功能、快速开始与同类选型对比,全部信息溯源自官网与 2.3.38 官方发布包(2026-10-30 实查)。
PmWiki 介绍与选型指南
目标:面向「想在一台普通 Linux 服务器上自托管一套低维护成本 Wiki/知识库」的运维与开发人员,讲清 PmWiki 是什么、文件型存储架构意味着什么、与其他主流 Wiki 引擎相比如何选型。本文全部信息来自 PmWiki 官网(www.pmwiki.org)与官方发布包(pub/pmwiki 目录、tarball 内 README.txt/INSTALL.txt),溯源与版本取证日期为 2026-10-30。
一、环境信息
本文为认知与选型篇,全部基于官方在线来源取证,未做本地部署性结论。取证环境如下:
- 溯源日期:2026-10-30(所有版本号、发布日期、下载校验和均为该日实查)
- 官方网站:https://www.pmwiki.org/ (当时可直连访问,首页响应约 571 KB HTML)
- 官方发布目录:https://www.pmwiki.org/pub/pmwiki/ (目录式列表,含历史全部版本的 tgz/zip 与 .new 系列文件)
- 官方最新稳定版(实查):pmwiki-2.3.38.tgz,发布目录时间戳 2024-11-03;同时提供
pmwiki-latest.tgz永远指向最新版 - 发布包实测下载校验(2026-10-30 直连官网下载两次,宿主机与远端服务器各一次,校验和一致):
- 文件大小:547884 字节
- SHA-256:
e34b06e57cf906b3a9b90a70b8c0d082bf8a7aecf81eef92bb543963bfd5911b
- 部署与运维操作(安装、配置、升级、备份等命令级内容)不在本篇展开,见《Ubuntu 24.04 安装 PmWiki 2.3.38 指南》、《PmWiki 2.3.38 配置参数详解》、《PmWiki 2.3.38 常用 CLI 命令与工具详解》。
💡 说明:PmWiki 官方未提供 GitHub Releases 下载渠道,版本事实一律以官网 pub/pmwiki 目录为准;官网同时提供
pmwiki-latest.tgz(最新稳定版)与历史版本存档,不存在需要第三方镜像取证的模糊地带。
二、软件概述
PmWiki(读作 "P-M-Wiki",PM 取自创始人姓名缩写)是一个用 PHP 编写的、以纯文件方式存储页面内容的 Wiki 引擎,用于协作创建与维护网站。官方 README 对它的定位只有一句话:"a wiki-based system for collaborative creation and maintenance of websites"。
- 作者与维护:项目由 Patrick R. Michaud(美国,社区通行称呼 pmichaud)于 2002 年前后创建;2015 年起主要维护者为 Petko Yotov(官网主页 www.pmwiki.org/petko,发布包皮肤版权行亦标注 "Skin Copyright 2017-2024 Petko Yotov")。官网左侧栏至今保留 pmwiki-users 邮件列表链接(michaud.com 域名的 Pipermail 归档,2026-10-30 实查仍在更新 2026-October 线程),社区以邮件列表 + 官网评论页为主阵地。
- 许可:GNU GPLv2+(官网皮肤版权行与发布包 license.txt 均为 GPLv2+,2026-10-30 实查)。
- 版本节奏(量化):从官方 pub 目录时间戳看,2.3 系列自 2.3.0(2022-01-15) 起至 2.3.38(2024-11-03),两年十个月发布 38 个小版本,平均约每月 1 个多,属于「缓慢但持续、以稳定压倒一切」的节奏;2.3.38 之后至 2026-10-30 无更高版本,官方以
pmwiki-latest.tgz指针发布。 - 运行依赖:PHP(官方发布包 docs/ 目录自带 INSTALL.txt 与全部内置文档;对 Web 服务器不挑——Apache、Nginx+PHP-FPM,甚至完全不用 Web 服务器、以 PHP 内置服务器或独立模式运行都有官方路径,见 docs/README.txt 对 Cookbook/Standalone 的指引)。无任何数据库依赖,这是它与 MediaWiki、Wiki.js 等引擎最本质的差异。
三、核心架构
PmWiki 的架构可以概括为「一个入口脚本 + 一组 PHP 库 + 两类文件目录」,理解这个结构就理解了它全部的运维特性(备份=拷目录、迁移=搬目录、升级=换核心文件):
3.1 发布包目录结构
官方 tarball 解压后的结构(来自官方 README.txt,2026-10-30 实查发布包内容):
pmwiki-2.3.38/
├── pmwiki.php # 唯一入口脚本(所有请求经它分发)
├── scripts/ # 核心脚本库(认证、上传、分页列表、Feed、i18n 等约 40 个模块)
├── cookbook/ # 官方配方(add-on)的空壳目录,社区扩展装在这里
├── pub/ # 静态资源:skins(皮肤)、css、guiedit(编辑工具条)等
├── docs/ # 精简文档、sample-config.php 示例配置、INSTALL.txt
├── local/ # 本地配置目录(config.php 及分组配置放这里)
└── wikilib.d/ # 出厂自带 wiki 页面:默认首页、PmWiki 官方文档、Site/* 界面页
安装运行后新增两个目录(官方 README:"After PmWiki is installed the following directories may also exist"):
wiki.d/:页面正文存储目录——每个页面一个纯文本文件(如Main.HomePage),是唯一必须可写的数据目录;uploads/:附件上传目录(启用$EnableUpload后按页面分组建子目录,如uploads/Main/)。
3.2 页面存储模型
💡 技术拓展:Wiki 引擎的内容存储主流有三类——文件型(每页一个文件,如 PmWiki/DokuWiki/WiKiss)、数据库型(内容进 MySQL/PostgreSQL,如 MediaWiki/WidgetWiki 类)、Git/版本库型(内容提交进版本库,如 Gitit/Gollum 类)。文件型天然免数据库运维(备份=打包目录、迁移=rsync、无 SQL 注入面),代价是大规模全文检索与超大规模并发要靠引擎自身的索引与缓存机制弥补。
PmWiki 属于文件型中的「单文件单页 + 变更历史同文件」模型:每个页面文件以 version=pmwiki-2.3.38 ordered=1 urlencoded=1 头部开头,正文以 text= 键值存放(换行以 %0a 编码),author:、csum:、diff: 等带时间戳的键直接把修订历史(含 diff)存在同一个文件里。这意味着:
- 一套 Wiki 的全部内容 =
wiki.d/目录下的文件集合,tar一条命令即可整体备份; - 页面级权限(读写口令)也直接写进页面文件头部属性,不依赖任何外部账号体系;
- 文件名即页面名(
Group.Page命名空间用点号分隔),跨文件系统移动不会破坏引用。
3.3 配置与扩展机制
- 配置分层:全局
local/config.php(从docs/sample-config.php复制起步)→ 按分组覆盖local/Group.php→ 按页面覆盖local/Group.Page.php;多站点共部署时还有 wiki farm 的farmconfig.php机制(官方文档 PmWiki/WikiFarms)。 - 配方(Cookbook)扩展:官方 cookbook/ 目录 + www.pmwiki.org/wiki/Cookbook 配方库,下载配方 PHP 文件放入 cookbook/ 并在 config.php 中
include_once即生效;认证(AuthUser)、上传策略、皮肤、编辑器增强等都是配方级扩展。 - 皮肤:
pub/skins/下每套皮肤一个目录 +.tmpl模板与 CSS,通过$Skin参数切换。 - 国际化:
scripts/xlpage-*.php提供 UTF-8 及 ISO-8859 系列编码页支持,配合官网 i18n 语言包(XLPage 机制)可整体汉化界面。
四、功能特性
以下特性均可在 2.3.38 发布包内直接验证(scripts/ 目录实查文件清单,2026-10-30):
| 特性 | 说明 | 对应模块(scripts/ 实查) |
|---|---|---|
| 页面编辑与修订历史 | 浏览器内编辑、自动保存 diff 历史、次要修订标记、编辑冲突检测(basetime+token) | pagerev.php、draft.php |
| 按口令的分级权限 | read/edit/attr/upload/admin 五类口令,可作用于站点/分组/单页,支持 AuthUser 用户名口令与群组 | authuser.php、author.php |
| 附件上传 | 按分组目录存储、扩展名白名单、大小与目录配额、可保留历史版本 | upload.php |
| 分页列表与全文检索 | PageList 引擎驱动目录页、站内搜索、按模板列出页面 | pagelist.php |
| 页面 trails(路径浏览) | 把一组页面串成上/下一篇的导读路径 | trails.php |
| Feed 输出 | RSS/Atom 订阅(Feed 配方内置,可按需启用) | feeds.php |
| 通知与订阅 | Notify 配方:页面变更邮件通知 | notify.php |
| URL 审批与黑名单 | 外链白名单审批、编辑垃圾内容黑名单 | urlapprove.php、blocklist.php |
| GUI 编辑工具条 | 编辑页可视化按钮(加粗、表格、附件插入等) | guiedit.php |
| 独立运行模式 | 无需传统 Web 服务器,可用 PHP 内置服务器或独立模式跑(官方 README 指向 Cookbook/Standalone) | (运行形态) |
💡 说明:上表不是功能承诺清单,而是「发布包里真实存在的模块」与官方文档宣称能力的对应关系;启用方式与参数见《PmWiki 2.3.38 配置参数详解》。
五、快速开始(最小可用示例)
以下为官方 docs/INSTALL.txt 给出的快速安装路径(引文实查自 2.3.38 发布包,2026-10-30):
- 把软件放到 Web 服务器可访问的位置;
- PmWiki 也可以在没有 Web 服务器的环境运行(官方指路 Cookbook/Standalone);
- 浏览器访问
pmwiki.php; - 若提示需要一个可写的
wiki.d/目录,按页面提示创建(该目录存放全部页面文件); - 如需目录索引,在主目录建一个只含一行
<?php include('pmwiki.php');的index.php(官方原文特意注明不带收尾?>); - 站点级配置:把注释完备的
docs/sample-config.php复制为local/config.php后按需编辑。
官方对第 3 步的提示值得原样照抄——首次访问很可能看到这样的报错(引文来自官方 INSTALL.txt 第 3 条,亦是新装环境最常见的第一个拦路虎):
"You may see an error message saying that PmWiki needs to have a writable wiki.d/ directory. If so, follow the directions to establish one. This directory will hold your wiki page files."
一条命令级的完整走通路径(下载 → 解压 → 授权 → 访问)在《Ubuntu 24.04 安装 PmWiki 2.3.38 指南》中有逐步实测回显,此处不再重复。若想先在容器化的 Compose 环境里体验同类 wiki 引擎的部署形态差异,可对照阅读《Otter Wiki Docker Compose 部署指南》。
六、适用场景与限制
6.1 适合的场景
- 内网知识库/团队文档站:无数据库、备份即拷目录,一台低配虚拟机即可长期运行;
- 个人/小团队静态感很强的资料站:页面即文件,可用 rsync/git 双重保护,历史与正文同文件自洽;
- 对审计与可控性要求高的环境:口令分级(读/写/属性/上传/管理)直接落文件,无外部账号体系依赖;
- 需要长期低维护的老系统配套文档站:PHP 7.2+ 即可运行(实测环境为 PHP 8.3,见部署篇),对运行环境极其宽容。
6.2 限制与注意
- 官方版本节奏慢:2.3.38 为 2024-11-03 发布,此后至 2026-10-30 无新版本;新特性依赖社区配方而非内核迭代,选型时需接受「内核稳定但演进慢」的现实;
- 无内置用户管理系统:默认口令模型,多人实名协作需启用 AuthUser 配方并自行维护用户文件;
- 全文检索与超大规模并发非强项:PageList 引擎按目录扫描文件工作,页面量到数万级后需关注缓存与索引参数(
.pageindex机制); - 默认主题朴素:外观现代化依赖 pub/skins 第三方皮肤,开箱观感与新一代 Wiki(如 Outline 类)差距明显;
- 编辑器为纯文本标记:PmWiki markup 自成体系(与 Markdown 不兼容),迁移内容时需要转换。
七、同类选型对比
以下是文件型/数据库型 Wiki 引擎的横向对比(2026-10-30 基于各官网与站内交付文档整理):
| 引擎 | 存储与依赖 | 权限模型 | 扩展机制 | 适合谁 |
|---|---|---|---|---|
| PmWiki | 纯文件(wiki.d 单页单文件,历史同文件);仅 PHP,无数据库 | read/edit/attr/upload/admin 五级口令 + AuthUser 配方 | Cookbook 配方 + skins 皮肤 | 要「零数据库、备份即打包」的内网知识库 |
| DokuWiki | 纯文件(每页 txt + 独立元数据目录);仅 PHP,无数据库 | 内置 ACL(按命名空间/页面)+ 用户管理 | 插件 + 模板生态庞大 | 想要文件型但需要更现代插件生态的团队 |
| MediaWiki | MySQL/PostgreSQL/SQLite 数据库;PHP | 较复杂的用户组/权限体系 | 扩展(Extension)体系,生态最大 | 百科式大型协作、需语义化与跨语言 |
| Wiki.js | 数据库(PostgreSQL/MySQL/MariaDB/SQLite);Node.js | 细粒度页面/分组权限 + 多认证源(SSO/LDAP/OAuth2) | 模块化(内置渲染管线多方言) | 现代化 UI + 企业 SSO 的场景 |
| Otter Wiki | 数据库(SQLite/MySQL 等);Python | 简单用户/只读/读写权限 | Markdown 原生 + 主题 | 追求开箱即用的轻量 Markdown wiki |
| Tiki | 数据库;PHP | 内置完备(组/权限/工作流) | 特性极其庞杂(wiki+CMS+tracker 一体) | 想要一套走天下的全功能套件 |
选型解读(关键差异):存储模型决定运维成本——PmWiki 与 DokuWiki 同属「零数据库」阵营,备份还原、迁移、故障排查都收敛到文件系统;区别在于 DokuWiki 的插件/模板生态与内置 ACL 更现代,PmWiki 的单页单文件(历史同文件)模型更「一个目录即全站」,且 markup 扩展体系(MarkupExpressions 等)更灵活。需要 SSO、细粒度审计与现代 UI 时,数据库型的 Wiki.js/Otter Wiki 更合适——站内已交付的《Otter Wiki 介绍与选型指南》与《Otter Wiki 2.26.1 配置参数详解》可作为该阵营的实测参照。若内容协作规模大到百科级,MediaWiki 1.48.0(mediawiki.org,2026-10-30 实查版本)的扩展生态仍不可替代。
一句话选型建议:在乎「服务器上只有一个目录要备份、十年不动也能跑」,选 PmWiki;在乎插件生态与 ACL 易用性,选 DokuWiki;在乎现代 UI 与 SSO,选 Wiki.js/Otter Wiki;在乎百科级规模,选 MediaWiki。
八、参考链接
- PmWiki 官网首页:https://www.pmwiki.org/ (2026-10-30 实查,含最新版信息与社区动态)
- 官方发布目录(全版本 tarball/zip 存档):https://www.pmwiki.org/pub/pmwiki/
- 官方安装文档(在线版):https://www.pmwiki.org/wiki/PmWiki/Installation
- 发布包内快速安装指引:pmwiki-2.3.38.tgz →
docs/INSTALL.txt(本文第五节引文来源) - 发布包内 README:pmwiki-2.3.38.tgz →
README.txt(目录结构与 Standalone 模式指路来源) - 官方配方库(Cookbook):https://www.pmwiki.org/wiki/Cookbook
- 站内实测参照:《Otter Wiki 介绍与选型指南》、《Otter Wiki Docker Compose 部署指南》