curl -s https://example.com/feed/ | head -c 32 | xxd
# 正常应以 3c 3f 78 6d 6c 开头,即 <?xml

浏览器直接打开 /feed/ 报 XML parsing error,提示 XML declaration not at first line,把源码复制出来看,第一行是空的。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:主题的 functions.php 结尾多了一个换行,或者某个插件在输出前 echo 了一个空格,这些都排在 XML 声明之前。文件带 BOM 时结果也一样,编辑器里根本看不见。

「feed XML 声明位置」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

处理上按这个顺序:用十六进制方式看 feed 输出的头几个字节,确认是空白还是 EF BB BF;把 functions.php 结尾的闭合标签连同后面空行一起删掉,PHP 文件不需要它;逐个停用插件对比输出,定位是哪个插件在钩子里多打了字符。

确认没问题再收工,feed 第一行就是 XML 声明,浏览器打开不再报解析错误。

作者 9823189