通用附件上传:白名单、大小限制与可设价格的三层校验

CLARA轻量论坛系统
CLARA轻量论坛系统 星耀SVIP星耀SVIP管理员管理员 黑卡会员黑卡会员
发布于 2026-10-06 20:00 ·5 浏览 ·0 回复

照着这篇配一遍,你就能把 Clara BBS 的附件上传配成「只放行该放行的格式、只接受该接受的体积、还能让附件单独卖钱」的三层闭环。

第一步:先弄清三层校验各管什么

附件从用户点上传到别人下载,一共过三道关,顺序固定:

  1. 类型层——扩展名白名单,管"允许传什么格式"
  2. 体积层——PHP 与目录,管"多大能传上去"
  3. 权限层——价格与下载权限,管"谁能下、要不要付费"

前两层是技术准入,配错了用户根本传不上来;第三层是运营策略,配错了要么白送要么没人买。分开理解,排查时才知道该去哪个页面。

注意:后台的"允许的扩展名"管图片,"附件允许的扩展名"管附件,是两个独立字段。只改了其中一个,另一类文件照样传不上——这是最常见的误判。

第二步:配第一层,附件扩展名白名单

入口:后台「系统设置→上传限制」。

把确实要放行的格式写进"附件允许的扩展名",例如 zip、rar、7z、pdf、docx、xlsx、apk 等,用逗号分隔。系统对上传文件做类型白名单校验,不在名单里的直接拒收,不存在"猜一猜能不能过"的模糊地带。

注意:上传失败时页面会提示具体原因(白名单不符 / 超过 PHP 上限 / 目录不可写),照着提示改就行,不用反复试。

注意:改动保存即生效,不需要清缓存。配完立刻用一个白名单外的格式试一次,确认真的被拦住。

第三步:配第二层,体积上限

体积卡在两个地方,缺一不可。

PHP 层:upload_max_filesize 和 post_max_size。宝塔面板默认 2M,手机拍一张照片就超了,建议至少调到 30M 以上,改完重载 PHP。

目录层:uploads 目录必须可写,否则文件通过了所有校验也落不了盘。

注意:post_max_size 必须大于等于 upload_max_filesize。只调大后者,大文件会在表单提交阶段就被截断,报错信息比"文件太大"更让人摸不着头脑。

注意:允许的扩展名再全,PHP 上限不放开,结果还是传不上。这两处要一起改。

第四步:配第三层,价格与下载权限

第三层不在后台,而在发帖页的附件面板里,边传边设:

  1. 上传附件,等它出现在面板列表里
  2. 设置价格与货币——填 0 表示免费,填正数即为付费附件
  3. 选择下载权限——所有人 / 会员 / 指定用户组

附件交易和转账、签到、悬赏、礼物共用系统统一的记账体系,账目口径一致。

不打算占服务器存储的,可以切到网盘链接模式:只填网盘链接和提取码,文件放在第三方网盘上。这种模式不参与本地体积校验,但价格与下载权限照样可以设,运营逻辑和本地附件完全一致。

注意:价格要填数字 0 才是免费,配付费附件时先想清楚面向谁——面向所有游客开放下载,就等于公开分享。

第五步:三种账号各验一遍

配完别急着上线,按这个清单跑一遍:

  • 传一个白名单外格式 → 应被拒绝
  • 传一个超过 PHP 上限的文件 → 应提示超过上限
  • 传一个正常附件并标价 → 用另一个普通账号打开帖子,确认出现购买入口
  • 把下载权限设为"指定用户组" → 用组外账号确认无法下载

四项都符合预期,三层校验就算配到位了。

小结

  • 三层各管一段:扩展名白名单管类型,PHP + 目录管体积,价格与权限管下载。
  • 图片和附件的扩展名白名单是两个独立字段,别只改一个。
  • post_max_size 要 ≥ upload_max_filesize,uploads 目录必须可写。
  • 附件价格在发帖页的附件面板里设,0 为免费;下载权限可选所有人 / 会员 / 指定用户组。
  • 网盘链接模式不占服务器存储,但同样可设价格与权限。
  • 所有设置保存即生效,无需清缓存;上传失败会提示具体原因,按提示排查最快。
本文转载自 Clara轻量论坛系统,原文地址:https://www.leleweb.cn/thread-728.html
转载请注明出处,版权归原作者所有。

全部回复 0

还没有回复,来抢沙发~