本文目录 4 节

在很多技术讨论里,PHP 似乎总是被当作“上一个时代”的选择。但如果你要做的是一款部署在普通虚拟主机、由个人长期维护的内容系统,它依然是非常务实的基础设施。

薄框架,不等于没有结构#

不使用 Laravel 这样的全栈框架,并不意味着把代码都写进一个 index.php。相反,越小的系统,越需要清楚的分层:

  • 入口层:负责路由、会话、错误处理。
  • 领域层:文章、分类、评论、媒体,各自拥有明确的职责。
  • 接口层:后台通过 JSON API 与前端交互,而不是直接渲染页面。
  • 呈现层:前台主题与后台界面彼此独立。

这样的结构没有魔法,但每一层都可以被单独理解和替换。

兼容 PHP 7.4 的几个细节#

宝塔面板上仍有大量 PHP 7.4 环境。为了保证兼容,需要刻意避开一些新语法:

  • 不使用 match、构造器属性提升、str_contains;
  • 不依赖枚举与只读属性;
  • 对 PDO 的返回类型保持宽容,因为不同驱动可能返回字符串;
  • 时间计算尽量交给 PHP,而不是数据库方言函数。

兼容性不是保守,而是对部署环境的尊重。

数据库只做它擅长的事#

内容系统的大部分查询都很简单。真正需要小心的是分页、搜索与关联数据:

  1. 分页参数必须强制转为整数,避免把用户输入拼进 SQL;
  2. 标签、分类使用关联表,避免在文章表里存逗号分隔的 ID;
  3. 列表页一次性取回标签,避免 N+1 查询;
  4. 所有写入使用预处理语句,并统一时间格式。
系统的骨架
把复杂度留在结构里,而不是散落在代码中。

安全是默认值#

后台登录、CSRF、上传校验、输出转义,这些不应该等到上线前才补。把它们做成基础设施的一部分,后续每加一个功能,都会自然继承这些保护。

轻量不是省掉安全,而是让安全足够简单,简单到不会忘记。

本文采用「署名—非商业性使用 4.0 国际」许可协议。