首页 › 博客 › 文章

升级后网站白屏/500 了:10 分钟定位法

升级后网站白屏/500 了:10 分钟定位法

升级后白屏或 500,先 tail 错误日志拿到致命错误行号,再按插件目录逐个停用、切回默认主题、恢复权限与核心文件。做完前台能打开、wp-admin 可登录、日志无 FATAL,即判断做对了。

排查流程:10 分钟定位法

  1. 用 tail 与 grep 查看 PHP 与 Web 服务器错误日志,锁定 FATAL 行。
  2. 把 wp-content/plugins 改名或逐个移走,识别冲突插件。
  3. 将当前主题切换为 Twenty Twenty-Six 等默认主题。
  4. 用 core verify-checksums 与 chown/chmod 恢复核心文件与权限。
  5. 前台、后台、日志三方验证均已恢复。

先看错误日志而不是猜

白屏和 500 在 2026 年的 WordPress 上绝大多数不是“玄学”,而是 PHP 致命错误、内存耗尽或权限异常被 Web 层吞掉了输出。第一步永远是看日志,不要凭经验改代码。

定位日志文件路径

常见路径取决于运行环境。Nginx + PHP-FPM 看 /var/log/nginx/error.log 与 /var/log/php8.3-fpm.log(2026 年主流已是 PHP 8.3/8.4)。Apache 看 /var/log/apache2/error.log。容器环境用 docker logs 或 kubectl logs。

实时追踪与过滤

打开两个终端,一个跑前台请求,一个盯日志:

# 实时看 Nginx 错误日志
tail -f /var/log/nginx/error.log

# 实时看 PHP-FPM 日志并过滤 FATAL / WordPress
tail -f /var/log/php8.3-fpm.log | grep -Ei 'fatal|wordpress|allowed memory'

# 若使用 WP_DEBUG,查看站点内日志
tail -f /var/www/html/wp-content/debug.log

临时打开 WP_DEBUG

如果日志里没有细节,编辑 wp-config.php:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

再访问一次前台,debug.log 会记录完整堆栈。注意:排障后要把 WP_DEBUG 关回 false,避免线上泄露路径。

怎么验证做对了

日志中出现明确的一行 Fatal error: Uncaught Error … in /path/file.php:LINE,或 Allowed memory size exhausted。拿到文件名与行号,你就知道是插件、主题还是核心。若日志为空且仍 500,通常是 .htaccess 或权限问题,进入后面小节。

踩坑与回退

踩坑:只 tail 一个日志,漏了 PHP-FPM 的慢日志与内存限制。回退:把 wp-config.php 改回原值并 service php8.3-fpm restart。若磁盘满导致日志写不进,先 df -h 清空间。

按插件目录逐个停用

拿到错误指向某个插件后,不要只依赖后台——后台可能已经进不去。用文件系统方式停用最快。

整体停用:重命名插件目录

cd /var/www/html/wp-content
mv plugins plugins_off
mkdir plugins
# 此时所有插件失效,前台若恢复说明是插件问题

然后把 plugins_off 里的目录一个个移回 plugins 并刷新,直到复现白屏。

获取报价

邮箱 + 需求 + 预算区间,24 小时内回复报价。

逐个停用:命令行循环

更精细的做法是写一个小循环,每次只启用一个:

cd /var/www/html/wp-content
for d in plugins_off/*/; do
  n=$(basename "$d")
  mv "plugins_off/$n" "plugins/$n"
  echo "enabled: $n"
  curl -s -o /dev/null -w "%{http_code}
" https://example.com/
  read -p "press enter to continue, Ctrl-C to stop: "
done

返回码 200 为正常,500 即命中冲突插件。

2026 年现状与函数级原因

2026 年大量插件已支持 PHP 8.x,但旧分支仍调用已移除的 create_function()、each() 或动态属性。WordPress 核心在 6.7+ 强化了 _doing_it_wrong() 提示,但致命错误仍会中断。停用本质是让 register_activation_hook 与 add_action 不再执行。

怎么验证做对了

前台返回 200、wp-admin 能登录、且错误日志不再新增 FATAL 记录。此时把冲突插件留在 plugins_off,其余移回。

踩坑与回退

踩坑:mu-plugins 目录不受此操作影响,必看。回退:mv plugins plugins_bak && mv plugins_off plugins 即可全部恢复。若用了对象缓存,执行 wp cache flush。

切回默认主题

插件排除后仍白屏,问题常在主题的 functions.php 或模板里的未捕获异常。2026 年默认主题是 Twenty Twenty-Six,切换它可隔离子主题与父主题缺陷。

用 WP-CLI 直接切

wp theme list
wp theme activate twentytwentysix

若 WP-CLI 不可用,用 SQL:

UPDATE wp_options
SET option_value = 'twentytwentysix'
WHERE option_name IN ( 'template', 'stylesheet' )
LIMIT 2;

为什么切主题能定位

主题通过 add_theme_support、wp_enqueue_scripts 与模板层级参与渲染。若主题在 after_setup_theme 钩子里调用不存在的方法,PHP 8 会抛 Error 而非 Warning,直接白屏。默认主题代码经核心团队校验,可证明是否与站点数据无关。

怎么验证做对了

前台显示 Twenty Twenty-Six 默认页且状态码 200;后台“外观-主题”中当前主题名称正确。若切回后正常,原主题需升级或修补。

踩坑与回退

踩坑:多站点网络下要用 wp theme enable –network。回退:wp theme activate 原主题目录名,或把 SQL 改回原值。子主题丢失父主题时也会白屏,确认父主题在 themes 目录。

恢复权限与文件完整性

升级脚本若被中断,或用了 root 解压,会出现文件属主错误、核心文件半截,表现为 500 而非白屏提示。

校验核心完整性

cd /var/www/html
wp core verify-checksums

输出 Warning: File doesn’t verify against checksum 即被篡改或残缺。

重新下载核心

wp core download --force --skip-content

此命令只覆盖 wp-admin 与 wp-includes,不动 wp-content。

修复权限与属主

chown -R www-data:www-data /var/www/html
find /var/www/html -type d -exec chmod 755 {} ;
find /var/www/html -type f -exec chmod 644 {} ;
chmod 600 /var/www/html/wp-config.php

2026 年容器镜像常以 www-data 或 nginx 用户运行,属主错则 PHP 无法读文件。

检查 .htaccess 与索引

若用 Apache,损坏的 .htaccess 会直接 500:

mv /var/www/html/.htaccess /tmp/htaccess.bak
wp rewrite flush --hard

Nginx 则确认 try_files $uri $uri/ /index.php?$args; 在 server 块内。

怎么验证做对了

wp core verify-checksums 无输出;前台 200;wp option get siteurl 正确。权限用 ls -la 看属主为 Web 用户。

踩坑与回退

踩坑:chmod 777 是错误做法,会被部分主机拦截且留后门风险。回退:用 tar 备份的整站包解压回退,或从 WordPress 备份策略:3-2-1 原则与恢复演练 提到的快照恢复。若升级前做过镜像,直接回滚镜像最快。

为什么升级后会这样:逐层原因

为什么升级后会这样:逐层原因
层典型原因表现
PHPPHP 8.x 移除旧函数Fatal error 白屏
插件钩子中调用失效 API局部或全站 500
主题模板未兼容新块编辑器前台空白
文件升级中断致核心残缺500 且日志空

理解分层后,你会明白“先看日志”不是形式主义,而是把四层收敛到一行错误。

预防:让下次不再慌

升级前在预发环境跑通,并用 WordPress 企业网站开发 团队常用的变更窗口制:低峰期、可回滚、有快照。自动更新策略可参考 WordPress 自动更新该开还是该关:一套可控的更新策略,把核心小版本与插件大版本分开处理。

常见问题

升级后白屏但错误日志为空怎么办?

多为权限或 .htaccess 问题。用 tail 看 Web 服务器日志而非仅 PHP 日志,并按“恢复权限与文件完整性”小节 chown 与 rewrite flush。

停用所有插件后仍 500 是不是核心坏了?

是的概率很高。执行 wp core verify-checksums 与 wp core download –force –skip-content 重装核心即可。

WP-CLI 命令不存在怎么切主题?

用 SQL 更新 wp_options 的 template 与 stylesheet 为 twentytwentysix,详见“切回默认主题”小节。

立即执行清单

  1. tail /var/log/nginx/error.log 与 php8.3-fpm.log,取 FATAL 行。
  2. mv plugins plugins_off 并逐个移回,用 curl 看返回码。
  3. wp theme activate twentytwentysix 或改 SQL 切主题。
  4. wp core verify-checksums 后 chown/chmod 修权限。
  5. 前台 200、后台可登录、日志无新增 FATAL 三项验证。

需要专业团队托管升级与排障?了解我们的 WordPress 开发服务,让站点稳定运行在 2026。

“, “faq”: [{“question”: “升级后白屏但错误日志为空怎么办?”, “answer”: “多为权限或 .htaccess 问题。用 tail 看 Web 服务器日志而非仅 PHP 日志,并按“恢复权限与文件完整性”小节 chown 与 rewrite flush。”}, {“question”: “停用所有插件后仍 500 是不是核心坏了?”, “answer”: “是的概率很高。执行 wp core verify-checksums 与 wp core download –force –skip-content 重装核心即可。”}, {“question”: “WP-CLI 命令不存在怎么切主题?”, “answer”: “用 SQL 更新 wp_options 的 template 与 stylesheet 为 twentytwentysix,详见“切回默认主题”小节。”}], “cover”: “Flat technical illustration of a broken white browser window and server logs with magnifier, muted blue and orange palette, no text numbers logos or watermark, 1200×630 style

参考资料与延伸阅读

WPDaiwei

WPDaiwei-专业Wordpress网站定制开发提供商

需要 WordPress 开发服务?

24 小时内免费出方案与报价,国内国外都接单。

QQ