phpBB 是开源论坛里活得最久的那个,2000 年就有了,比 WordPress 还早三年。我把 3.3.19 装上、建了版块、灌了帖子、把配色和 logo 换成自己的,前台后台都跑通了。
中间被绊了四次。四次都不是 phpBB 的 bug,全是「本地环境跟 Apache 不一样」的连带后果。按我被绊的顺序写。

phpBB 能干什么
一句话:最正统的那种论坛——版块、主题、帖子、版主、审核,二十多年攒下来的那一套。
按用途对号入座——
- 兴趣论坛、行业社区:版块一分,主题帖一挂,内容沉淀得住
- 要管得很严的社区:权限能细到「某个版块里某个用户组能不能发新帖」,这在别的论坛程序里很少见
- 需要审核流程的站:新用户发帖先审、举报队列、警告记录,一整套治理工具
- 技术支援 / 答疑社区:搜索索引、附件、投票都有,问答形态也能凑合
- 要长期跑的老站:2000 年活到现在,升级路径清楚,不会哪天作者跑路
- 多语言社区:语言包机制成熟,中英文界面都有人维护
它不适合「想要现代感」的项目——后台是十几年前的画风,前台模板也偏传统。要轻快现代的,看 Flarum。
核心功能亮点
- 版块 + 主题 + 帖子:最经典的论坛结构,层级、置顶、公告、锁定都齐
- 权限矩阵:版块 × 用户组 × 动作三个维度组合,能细到「能不能在某个版块发投票」
- 审核队列:新用户帖子先入队,版主通过才显示
- 举报与警告:举报有人处理,警告能累计
- 附件配额:按用户组限制单个附件大小和总量
- 投票:主题帖里直接开投票
- 私信(PM):站内消息系统,带收件箱和规则
- 搜索索引:自带全文索引,帖子多了也能搜
- 扩展机制:3.x 的 extensions 扔进目录就能启用,不用改核心
一、它是什么
官方包 7.5MB,解压 3952 个文件,GPL-2.0。PHP 写的,数据库支持 MySQL、PostgreSQL、SQLite、MSSQL、Oracle。
后台叫 ACP,权限细到「单个版块 × 单个用户组 × 单个动作」。版块、主题、帖子、附件、投票、私信、版主、警告、审核队列、搜索索引,全都有——二十多年一点点堆上去的,代码风格也停在那个年代。
官方包里只有英文,简体中文要单独下语言包。这一步比装它本身麻烦。
二、第一个坑:后台一打开就是 Fatal error
前台正常,点进 /adm/,白屏:
Fatal error: require('./../common.php'): Failed to open streamadm/index.php 第一行是:
$phpbb_root_path = './../';
require($phpbb_root_path . 'common.php');这个相对路径相对当前工作目录解析,不是相对脚本目录。Apache 跑 mod_php 会先把 CWD 切到脚本所在目录,所以这写法在 Apache 上二十年没出过事。PHP 自带的开发服务器不切。
补一个 router:
if (strtolower(substr($file, -4)) === '.php') {
chdir(dirname($file)); // 等价 Apache 的行为
require $file;
return true;
}chdir 那行是关键。这个 router.php 我在包里留着了,放到 Nginx 或 Apache 上跑就删掉。
三、第二个坑:装完了,前台说「本论坛暂时关闭」
phpbb_config 里的 board_disable 是 0。后台进不去(第一个坑),前台说关站,两个坑叠在一起,很容易以为是同一个问题。
后来在 phpbb/user.php 第 369 行看到:install/ 目录还在,就强制关站。 它不看你 board_disable 写的是什么——安装程序没删干净,说明你可能还没装完。
我用的 CLI 静默安装(install/phpbbcli.php install install-config.yml),装完不会自己删目录。rm -rf install,首页立刻正常。
四、第三个坑:后台进得去了,但一直把我踢回首页
访问 /adm/index.php,302 跳回 /index.php,连登录框都不给。
先怀疑 session_admin:这是个字段没错,但它存的是时间戳不是布尔,我写 1 等于 1970 年,判过期。改成 int(time.time()),还是被踢。
真正拦住它的是 phpbb/session.php 里的 NEED_SID:
if ($this->data['session_id'] !== $sid && $config['require_sid'])
{
// URL 上的 sid 和当前会话不一致 → 401
}phpBB 默认要求后台 URL 带 sid。 手敲地址一定进不去,必须 /adm/index.php?sid=<会话id>。
对普通用户不是问题:页脚那个「管理控制面板」链接是 append_sid() 生成的,自动带上。但写脚本、或者从收藏夹直接打开,就会卡在这里,而且报错完全不提 sid。
五、第四个坑:新版块建好了,首页看不见
后台能进了,我建了两个分类四个版块。回首页——只有默认那一个,新的三个不显示。
phpbb_acl_groups 里新版块的行跟我手建的对照行一模一样,auth_setting 都是 1。查探针,f_list=0 f_read=0。
原因在 phpbb_users 的 user_permissions 字段——它存的是每个用户的权限位串,auth->_fill_acl() 解析成数组。新建版块后位串变了,但 phpBB 只比对总长度,不比对每个版块的位,所以 Guests 用的还是旧位串。
一句话解决:
update phpbb_users set user_permissions='';清空后下一次请求 acl_cache() 会重新编译,六个版块全变成 f_list=1。
这个坑值得单独记:后台改权限能生效,是因为改完它会主动清这个缓存;直接改数据库不会。
六、品牌化:prosilver 没有 CSS 变量
默认主题 prosilver 像「2010 年的 Bootstrap」——结构清楚,但没有变量层。颜色全写死在 styles/prosilver/theme/colours.css,而这是编译产物。
我直接替换色值,29 处:
#12A3EB → #01316F 主蓝 → 藏蓝
#0076B1 → #012A5C 渐变底 → 深藏蓝
#368AD2 → #11929A 次链接 → 青绿
#105289 → #0E7C84 链接 → 青绿深顺序有讲究。短的值先换会误伤——#0076B1 是 #12A3EB 的渐变底部色,你要是先换了主色那几行,后面这行还是蓝的,页面就花了。
还有一处容易漏:后台的 logo 不是 <img>,是 adm/style/admin.css 里 #page-header 的 background: url("../images/phpbb_logo.svg")。换了文件还得改 background-size,不然 616×168 的横版 logo 会被塞进 149×52 的方框。前台同理,在 common.css 的 .site_logo。

七、真解压之后,又冒出来两个坑
前面六个坑都在我自己机器上,改完就完了。这两个只在「换机器、换目录」时出现,也让我把包改了两遍。
端口被写死。 安装时填的 server_port: 8902,因为 install-config.yml 里 force_server_vars: true,它被写进数据库,之后所有 append_sid() 生成的链接都强制拼 127.0.0.1:8902。包发给别人、双击 bat 起在 8080,首页正常,点任何链接都跳到 8902。改法是把 force_server_vars 关掉,cookie_domain 清空。
数据库连不上。 原来写的是 $dbhost = './store/board.sqlite3'。SQLite 没有服务器,这就是文件路径,那个 ./ 相对当前工作目录——前台能打开,后台的 CWD 被 router 切到了 adm/,路径变成 adm/store/board.sqlite3,报 Unable to open database file。改成 __DIR__ . '/store/board.sqlite3',__DIR__ 永远是配置文件自己所在目录。
所以「打包完解压到另一个目录跑一遍」不能省。这两个坑我不是设计时想到的,是解压完点进去撞出来的。
八、实测结果
版块页,左边版块树,右边主题列表,未读的用蓝色小图标标出来:

帖子页,楼层、作者信息、签名、引用、举报都在:

发帖页是完整的 BBCode 编辑器:

后台的版面管理,可以拖拽调顺序、改父级、设版块类型:

成员列表,按首字母分页:

手机版 390 宽,没有横向溢出,但字号偏小、行距偏紧:

九、缺点
代码风格停在 2005 年。 全局变量、$db->sql_query() 拼字符串、模板里 <!-- IF -->。想加功能得先读懂 module 机制(每个后台页面一个 class,注册在 phpbb_modules 表里)。不是难,是旧。
中文语言包没有官方渠道。 phpbb.com 的下载页对大陆 IP 经常 403,简体中文一直靠 phpBB 中文社区维护。我这次是从 GitHub 镜像仓库拿的(binghuiyin/phpbb-language-zh-cmn-hans),v26.10.1 对应 3.3.19。一个二十年的项目,中文支持靠志愿者,这件事本身就是信号。
后台首页有个甩不掉的蓝条,提示 config.php 可写、建议设成 640。Windows 上权限概念不一样,这条基本消不掉。
移动端能用不好用。 390 宽不溢出、能发能回,但那一排图标按钮挤成一行,误触率高。
全文搜索要自己调。 自带索引的中文分词一般,想搜得准得换 Sphinx 或 Elasticsearch 扩展。
十、自己动手的成本
装 phpBB 本身十分钟。时间全花在后面:
- 搞定中文语言包。官网 403、社区站有 Cloudflare 挑战,得找镜像,我第一次花了一个多小时
- 建版块调权限。看着是点鼠标,实际是「用户组 × 版块 × 动作」三维矩阵,漏一个就是帖子看不见
- 品牌化。前台 29 处色值 + 两处 logo 尺寸,后台一处背景图
- 真机验证。最容易跳过,也最该做
我的记录:下载到前台出页面一个下午;后台能进、版块能显示又花两小时(卡在权限位串);打包后真解压验证揪出端口和数据库路径两个问题,来回改了两遍包。
十一、我打的这个包
包里塞了一份 Windows 便携 PHP 8.3,跳过语言包和环境两道坎:
| 内容 | 说明 |
|---|---|
site/ | phpBB 3.3.19 本体 + 中文语言包 + 示例版块帖子 |
php/ | Windows 便携 PHP 8.3.35 |
原始包/ | 官方 phpBB-3.3.19.zip,一字节没动 |
预览截图/ | 8 张,就是跑起来的这个包 |
启动论坛.bat | 双击起站 |
两个小提醒:
- 建议先「转存到自己网盘」再下载——直接下载的链接容易失效,转存后就是你自己的了,随时能下;
- 手机上操作:点开链接 → 右下角「保存到网盘」→ 回夸克 App 的「我的网盘」里下载。
装之前先确认两件事:PHP ≥ 7.2(我用 8.3 跑的,8.2 更稳)、有一个 MySQL 或 PostgreSQL 库。另外中文路径千万别用——PostgreSQL 的 initdb 对中文目录零容忍,这是我这次卡最久的地方。
解压,双击 启动论坛.bat,浏览器自己打开 http://127.0.0.1:8080。管理员 ymwadmin,密码 Ymw@2026#Bay。后台要从页脚「管理控制面板」点进去,手敲地址会因为没有 sid 被踢回首页——第四节那个坑。
数据库用 SQLite,纯文件,不用装 MySQL。代价是并发写会锁表,几百人同时在线没问题,再大得换。
这个包我真解压跑过:解压到带中文的目录 → 起服务 → 首页/版块/帖子/搜索/成员 → 登录 → 后台首页/版面管理/用户管理/风格管理/论坛设置 → 手机 390 宽。十五项全过。
十二、谁适合用
要一个功能齐全、能长久跑的传统论坛,phpBB 是稳妥选择。它慢,但稳;它旧,但什么都想到了——审核队列、警告、版主权限、附件配额,这些 Discuz 和 Flarum 要么没有要么得装插件。
要轻、快、现代感,去用 Flarum。phpBB 的后台重量会让你劝退。
要做中文社区,先想清楚语言包和维护这两件事。
包里源码保持原样,只额外加了启动脚本、说明、免责声明。GPL-2.0,LICENSE 在 site/docs/CREDITS.txt。