点了一下「更新」,刷新,白屏。或者一个大大的 500 Internal Server Error。
后台也进不去了。这时候心跳会加速——尤其是这个站正在跑广告、正在接询盘的时候。
先说结论:90% 的情况不是数据丢了,是某个插件或主题跟新版本不兼容。数据都在数据库里,网站只是跑不起来。不要重装,不要从备份恢复(先别急),按下面的顺序来。
第一步:先开错误显示(30 秒)
白屏的本质是「PHP 报错了但错误被隐藏了」。你要做的第一件事是让它把错误说出来。
编辑网站根目录的 wp-config.php,找到这行:
define( 'WP_DEBUG', false );
改成:
define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', true );
刷新页面。这时候你会看到真正的错误信息,比如:
Fatal error: Cannot redeclare get_products() (previously declared in ...)
这一条信息值千金——它直接告诉你哪个文件、哪个函数出问题了。文件名里通常就带着插件或主题的名字。
如果错误里能看到 /wp-content/plugins/某某插件/,直接跳到第三步。
注意:查完之后记得把 WP_DEBUG_DISPLAY 改回 false,不然访客也能看到你的报错信息(安全事故)。
第二步:确认是插件还是主题(不用登录后台)
后台进不去没关系,用 FTP 或文件管理器直接改文件夹名。
先禁掉所有插件
把 /wp-content/plugins 这个文件夹改名为 plugins-off。
然后刷新网站:
- 网站恢复了 → 是插件的问题,进第三步
- 还是白屏 → 不是插件的问题,把名字改回来,进第四步
WordPress 找不到 plugins 目录时会自动禁用所有插件,但插件的设置数据都还在数据库里,改回名字后数据不丢。这是最安全的一招。
再切回默认主题
如果上面确认不是插件问题,把 /wp-content/themes/你现在的主题 改名。
WordPress 找不到当前主题时会自动回退到默认主题(比如 Twenty Twenty-Four,前提是它还在)。
- 恢复了 → 主题的问题
- 还是白屏 → WordPress 核心文件或服务器环境的问题,进第五步
第三步:找出是哪个插件(二分法)
把 plugins-off 改回 plugins,然后进去把插件一个个改名来试?太慢了。
更快的方法:把插件目录里的文件夹全部改名,然后一半一半地改回来。
- 全部改名(相当于全禁用)
- 把其中一半改回原名,刷新测试
- 如果坏了,问题在这一半里;如果没坏,在另一半里
- 对有问题的那一半重复这个操作
10 个插件,3 次就能定位到具体的那个。比一个个试快得多。
找到之后:
- 去插件官网看有没有更新版本
- 看它的「最近更新时间」和「兼容版本」——如果是个两年没更新的插件,趁早换掉,迟早还会出问题
第四步:主题问题怎么处理
如果是主题导致的,而且你改过主题文件(尤其是 functions.php):
- 回想最近改了什么,还原那处修改
- 如果是买的商业主题,去官网下载最新版覆盖
- 如果是子主题的
functions.php报错,检查语法——少一个分号、多一个括号都会白屏
强烈建议:以后所有主题定制都放在子主题里,这样主题更新不会冲掉你的改动,出问题也好定位。
第五步:核心和环境问题
PHP 版本不兼容
最常见的隐藏杀手。你把 PHP 从 7.4 升到 8.2,结果某个老插件用了废弃语法,直接 Fatal error。
排查:宝塔面板 → 软件商店 → PHP → 切换版本,退回原来的版本试试。
教训:升级 PHP 之前,先在测试环境跑一遍。没有测试环境的话,至少挑在流量最低的时候做,并且先做完整备份。
PHP 内存耗尽
错误信息如果带 Allowed memory size of ... exhausted,是内存限制太低。
在 wp-config.php 加:
define( 'WP_MEMORY_LIMIT', '256M' );
或者在宝塔的 PHP 设置里改 memory_limit。
核心文件损坏
更新过程中网络中断、磁盘满了,都可能导致核心文件只写了一半。
解决:下载同版本的官方 WordPress 包,解压,把 wp-admin 和 wp-includes 两个目录覆盖上去(wp-content 不要动)。
第六步:实在不行,用备份回滚
如果上面都没搞定,这时候才动备份。
关键原则:回滚前先把现在的数据库导出来存一份。因为你可能在白屏之前已经产生了新订单/新询盘,直接回滚会把这些数据一起抹掉。
mysqldump -u用户名 -p 数据库名 > /root/before-rollback-$(date +%F).sql
回滚后,如果有新增数据需要补回来,可以对比两份数据库手动补。
怎么让它不再发生:正确的更新姿势
大部分白屏事故,都是因为「看到更新提示就点了,没做任何准备」。正确流程:
- 更新前先备份(文件和数据库,异地存一份)——1 分钟的事
- 先看更新内容:插件的更新日志里有没有写「重大变更」
- 分批更新:不要一次性把所有插件都点了。一次更新 1-2 个,每更新完刷新看一眼。这样出问题时你马上知道是谁
- 挑时间:在流量低谷期更新。国内站的深夜,外贸站看你的主要客户时区
- 核心大版本更新先观望两周:WordPress 主版本(比如 6.7 → 6.8)刚发布时,插件生态往往还没跟上。让别的站先踩坑
最后说一句
白屏这件事,技术本身不难,难的是慌了之后乱操作。最常见的恶化路径是:白屏了 → 立刻恢复备份 → 发现备份是三个月前的 → 数据丢了三个月。
记住这个顺序:开错误显示 → 禁插件 → 切主题 → 查 PHP 版本 → 最后才动备份。按这个走,基本不会丢数据。