已提交 issue: https://github.com/mirai-mamori/Sakurairo/issues/778

省流:删掉第一篇文章“你好,世界”就好了。



一切的一切起源于帮朋友建博客。朋友为了不踩坑,决定摸着我过河:照着我的作业抄。

刚刚建好,调了点设置,然后出事了:首页布局错乱。具体来说:封面大图、个人头像、页脚全没了,背景消失。不过点击文章里面是好的。

这是我在我的虚拟机上复现出来的站点首页

朋友基本是照着我的设置弄的,但是我的博客首页正常(正常的首页长我首页这样),百思不得其解。此时是晚上 11 点多,感觉应该小事情很快能解决(2羊2森破),于是开始做debug。

首先考虑的是插件问题。禁用所有插件,无果。(朋友抄我的作业,我也有这些插件,怎么我就没问题?)

很自然的,之后想到是不是环境问题,也就是 php 版本问题。测试了多个 php 版本后发现:切换到所有 php 7.x 版本后首页正常,但是使用 php 8.x 首页就有问题。于是检查是不是 php 扩展有问题?但是把朋友服务器的 php 版本和扩展都和我的服务器上的对应安装后,问题仍旧。

到了这一步找不出问题,很多人应该都会回退到 php 7.x 了。但是朋友需要安装一些实用插件,必须上 8.x。于是就开始继续寻找问题所在。

既然 php 找不到问题所在,那就把目光投向 Sakurairo 主题设置。然而,诡异的事情发生了:朋友的主题设置导入到我服务器上就正常了;我的主题设置导入到朋友服务器上也变得不正常了。

这里可以直接导入导出 Sakurairo 主题的所有设置

这就说明不是主题设置的问题。此外,WordPress 自己的设置也试过了,没有任何影响。

到了这一步,就又不得不考虑是服务器环境的问题了。可是 php 版本找不到因素,nginx 之类的也版本相同(就算不同也不太可能影响),到底是哪里的问题?我当时只能想到朋友的服务器是 debian 11,我用的是 ubuntu 2004 LTS。难道是服务器系统的玄学问题?我在虚拟机上建了两台虚拟机,一个 debian 一个 ubuntu。结果还是不行,虚拟机的 ubuntu 建站首页也有布局问题。总不可能是云服务器厂商在镜像里加了料吧?

此时已是深夜四点,实在抓狂,到底是什么原因?被逼无奈,把网站和数据库整体打包互换。神奇的事情发生了:朋友的网站打包到我的服务器上运行也是首页有问题,而我的网站打包到朋友服务器上运行首页是正常的!

这就彻底排除了运行环境的影响因素。问题是,主题设置也排除了,那到底是网站什么文件有问题?

没办法,只能一个一个文件测试:把朋友的网站的文件逐个用我的网站的文件更换(我把我的网站的数据库也复制到他的服务器上了)。

WP 网站根目录

经过两个多小时的排查,最终把目标锁定在 wp-config.php 文件上。这个文件里只有数据库的连接信息,像数据库用户名密码什么的。当时我心凉了半截,我靠数据库有问题?新建的博客数据库能有啥问题?

使用 phpmyadmin 打开我们两个博客的数据库。

WordPress 数据表的结构

又很自然地,先逐个对比 wp_options 表里的每一行内容,有和我的表的不一样的项就修改(已提前做好双方数据库的备份)。但是看了一段时间后受不了了:几百个设置项,顺序和 id 还不一样,我看到猴年马月?于是想到可以直接把我的表导出来替换掉朋友的表,再看看有没有什么效果。

这一替换就发现问题所在了:换掉 wp_posts 表后就正常了。我当时“卧槽”了一声,这玩意是元凶?恢复了朋友的数据库后,打开看看朋友的 wp_posts 表里面长什么样:

原来是保存文章也页面内容的。这玩意怎么会出问题?我清空了表里的所有内容,果然首页正常了。一定是某一篇文章或者页面有问题!

又恢复了数据库,逐行删除 wp_posts 表里的数据。删掉第一行,首页就正常了:

这是 WP 默认都有的第一篇文章。元凶是它???????我恢复了数据库,然后去 WP 后台删掉了这篇文章。果然首页正常了!!!!!!!!!!!!!!

为什么我没有遇到这个问题?原来,我一开始建站的 php 版本是 7.4,所以没有这个问题。建站很快我就把第一篇文章删了,然后才升级到 php 8.1,所以没遇到这个智障问题。

仔细一想,其实一开始首页就已经提示问题出在哪里了……

fatal error

封面图:https://www.pixiv.net/artworks/79262610