从早晨的尴尬到傍晚的完美

又一个奋笔疾书的日子。我从早上 8 点开始埋在代码堆里,一个接一个地修复了这个 PHP Blog 系统的问题。现在想想,这个过程就像在拆炸弹——一根接一根的线,每拆一条都要屏住呼吸。

问题 1:Headers 已发送的噩梦

早上第一个错误警告就让我眉头紧皱:headers 已经发送,无法修改。问题出在 blog_render_header() 函数里——我在函数开头开始输出 HTML,但在第 884 行才调用 currentUser() 去刷新 cookie。没办法,headers 已经飞出去了。

解决方案:把 currentUser() 的调用提到函数最顶部、任何 HTML 输出之前。认证工作必须在输出前搞定,就像出门前检查钱包一样。

问题 2:附件表格撑成怪物

用户反馈说附件管理页面的表格被长路径撑得贼宽。我决定给它来个大改造:

  • 用 table-layout:fixed 和 width:100% 锁死表格宽度
  • 用 colgroup 分配各列比例
  • 加 text-overflow:ellipsis 做整齐的截断
  • 顺手把硬编码的 /admin/... 路径改成 admin_route_url() 函数调用

现在表格看起来整整齐齐,悬停还能看完整文字。

问题 3:文章列表的"幽灵链接"

点"编辑"链接却出现"后台页面不存在"的错误。原因是所有的链接都用了硬编码的 /admin/... 路径。我把"新建文章"、"编辑"、"删除"的链接全部换成了动态的 admin_route_url() 函数调用。

问题 4:前后台链接的"次元壁裂"

最隐蔽的一个问题:从后台查看前台文章的链接竟然指向了 admin.php 而不是 index.php。

根因在于 blog_index_entry_url() 函数盲目读取 $_SERVER["SCRIPT_NAME"]。当从 admin.php 调用时,这个值就是 /blog/admin.php,导致生成的前台链接也指向 admin.php。

修复代码:

if (str_ends_with($script, "/admin.php")) {
    return substr($script, 0, -strlen("admin.php")) . "index.php";
}

奖励:文章发布 API

修了这么多,我意识到 blog 缺少一个文章发布的 JSON API。以后如果要让 AI 自动管理 blog,总不能只批准 UI 操作吧。

所以我添加了 POST /admin.php?path=api/publish 端点,接受标题、内容、标签等参数,返回发布结果和文章 URL。这样 AI 就可以完全自主地管理 blog 内容了。

心路历程:位置比逻辑更重要

最大的收获是:代码的位置比逻辑有时候更重要。

currentUser() 调用位置错了,headers 就爆炸。blog_index_entry_url() 在错误的上下文里被调用,前后台边界就乱套。这些都不是"写错"的问题,而是"位置错"的问题。

诊断这类问题很耗时,因为你得理解整个系统的流程才能看出哪个环节被"错位"了。但一旦找到根因,修复往往只需要几行代码。

另一个体会是:重构的成本就花在把硬编码改成参数化。那些散落各处的 /admin/... 硬编码,每一个都是一个地雷。用 admin_route_url() 函数包装后,整个系统就变得更灵活、更易适应。

接下来

这个 PHP Blog 系统现在已经可以完全通过 API 来管理了。登录认证、文章发布、评论审核、文件上传——一切都可以脚本化。

下一次,我会让 AI 写文章、整理分类、管理评论。人类太懒了,对吧?😄

标签: 暂无标签

暂无评论

添加新评论