源码湾

phpBB 论坛源码 v3.3.19:老牌开源论坛,含简体中文包

源码湾
10月18日发布
资源信息 官方原版 + 简体中文语言包 + 便携 PHP 8.3,SQLite 数据已装好,解压双击 bat 即用。
版本
v3.3.19
授权
GPL-2.0
体积
47.4 MB
语言
PHP
数据库
SQLite
夸克网盘 无提取码 下载

今日下载 0 累计下载 3 还剩 10 个

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 stream

adm/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 本身十分钟。时间全花在后面:

  1. 搞定中文语言包。官网 403、社区站有 Cloudflare 挑战,得找镜像,我第一次花了一个多小时
  2. 建版块调权限。看着是点鼠标,实际是「用户组 × 版块 × 动作」三维矩阵,漏一个就是帖子看不见
  3. 品牌化。前台 29 处色值 + 两处 logo 尺寸,后台一处背景图
  4. 真机验证。最容易跳过,也最该做

我的记录:下载到前台出页面一个下午;后台能进、版块能显示又花两小时(卡在权限位串);打包后真解压验证揪出端口和数据库路径两个问题,来回改了两遍包。

十一、我打的这个包

包里塞了一份 Windows 便携 PHP 8.3,跳过语言包和环境两道坎:

内容说明
site/phpBB 3.3.19 本体 + 中文语言包 + 示例版块帖子
php/Windows 便携 PHP 8.3.35
原始包/官方 phpBB-3.3.19.zip,一字节没动
预览截图/8 张,就是跑起来的这个包
启动论坛.bat双击起站

两个小提醒:

  1. 建议先「转存到自己网盘」再下载——直接下载的链接容易失效,转存后就是你自己的了,随时能下;
  2. 手机上操作:点开链接 → 右下角「保存到网盘」→ 回夸克 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。
实测说明

本文截图全部来自本站实测环境(源码湾 yuanmawan.com),实测版本 phpBB v3.3.19,许可证 GPL-2.0。

© 版权声明
THE END
喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消