导语
WordPress升级了6.0之后突然崩溃无法使用,表现是在发布文章或者编辑文章界面停止加载,且界面没有任何内容显示,想着这应该是官方的锅,就想等着官方发布修复吧,可是等了一个星期也不见发布更新,然后尝试禁用插件,更换主题都没有办法解决这个问题,然后尝试自救
尝试解决
登录白塔面板,打开错误日志,还真的发现了一些东西
2022/06/01 15:22:26 [error] 17273#0: *1786577 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught DivisionByZeroError: Division by zero in /www/wwwroot/blog.vdake.cc/wp-includes/functions.php:493
Stack trace:
#0 /www/wwwroot/blog.vdake.cc/wp-includes/media-template.php(287): size_format()
#1 /www/wwwroot/blog.vdake.cc/wp-includes/class-wp-hook.php(307): wp_print_media_templates()
#2 /www/wwwroot/blog.vdake.cc/wp-includes/class-wp-hook.php(331): WP_Hook->apply_filters()
#3 /www/wwwroot/blog.vdake.cc/wp-includes/plugin.php(476): WP_Hook->do_action()
#4 /www/wwwroot/blog.vdake.cc/wp-admin/admin-footer.php(78): do_action()
#5 /www/wwwroot/blog.vdake.cc/wp-admin/post.php(369): require_once('...')
#6 {main}
thrown in /www/wwwroot/blog.vdake.cc/wp-includes/functions.php on line 493" while reading upstream, client: 43.132.170.118, server: blog.vdake.cc, request: "GET /wp-admin/post.php?post=90&action=edit HTTP/2.0", upstream: "fastcgi://unix:/tmp/php-cgi-80.sock:", host: "blog.vdake.cc", referrer: "https://blog.vdake.cc/wp-admin/edit.php"
顺着这个线索一直来到这个地方
emmmm….看起来像是一个库函数除以0崩溃了 那好办,一坨锡搞定
的确,成功修复了问题,这段代码也不知道是为什么服务的,先将就用吧,等待官方发布更新吧。
更新没有修复这个问题
今天(1个月后)更新了v6.0.1,现象依旧,于是想着这个会不会是仅仅我个人的问题,不是普遍性的问题所以官方没有修复?
于是开始自己着手解决问题,为了清晰思路,还写了一遍原因分析,链接直达
另外说明一下,上面的修复,可以编辑文章了,但是不能打开媒体库查看图片,发布的文章也不能居中。
2022/07/13 09:58:22 [error] 20580#0: *2422797 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught DivisionByZeroError: Division by zero in /www/wwwroot/test-wp.neje99.com/wp-includes/functions.php:493
Stack trace:
#0 /www/wwwroot/test-wp.neje99.com/wp-includes/media-template.php(287): size_format()
#1 /www/wwwroot/test-wp.neje99.com/wp-includes/class-wp-hook.php(307): wp_print_media_templates()
#2 /www/wwwroot/test-wp.neje99.com/wp-includes/class-wp-hook.php(331): WP_Hook->apply_filters()
#3 /www/wwwroot/test-wp.neje99.com/wp-includes/plugin.php(476): WP_Hook->do_action()
#4 /www/wwwroot/test-wp.neje99.com/wp-admin/admin-footer.php(78): do_action()
#5 /www/wwwroot/test-wp.neje99.com/wp-admin/upload.php(111): require_once('...')
#6 {main}
thrown in /www/wwwroot/test-wp.neje99.com/wp-includes/functions.php on line 493" while reading upstream, client: 43.132.170.118, server: test-wp.neje99.com, request: "GET /wp-admin/upload.php HTTP/2.0", upstream: "fastcgi://unix:/tmp/php-cgi-80.sock:", host: "test-wp.neje99.com", referrer: "https://test-wp.neje99.com/wp-admin/about.php"
仔细阅读才发现,真正的错误是在functions.php:493这里,上次只是修复了一处调用的地方,并没有修复这个函数,导致所有调用了这个函数的其他地方都崩溃,这也就解释了无法打开媒体库了,糊涂啊
好让我们来看看是哪个函数在捣蛋,定位到493行的这个函数
经过我debug之后发现了问题所在
这个是一个将字节转换成容易识别的单位函数,比如 1048576B 转换成 1GB
看到上面在v6.0.0版本的时候添加了YB 和 ZB选项(神TM要用这么大的单位??)
但是下面的 YB_IN_BYTES 和 ZB_IN_BYTES = 0
修复它也很简单,只需要将这两个注释掉就可以了
具体为什么=0的原因无法知道,这次就修复到这里
找到问题根源
时光冉冉,半年又过去了,每次更新WordPress系统都会覆盖被修改的文件,所以导致问题会重新出现,每次更新系统都要改一次,这好折腾,不行,得想想办法…
这个问题出现了那么久,官方都没有修复,我就猜测这个锅可能不能让WordPress来背,这个问题的原因可能是我用了跟其他人不一样的运行环境,因为环境不一样导致这个问题在其他的设备上无法复现所以这个问题不会被修复,因为官方都没有发现这个问题,所以我来到宝塔后台,尝试更新PHP版本
哇啦!成功啦!a ha 原来这个是PHP运行环境的一个Bug,看来保持更新确实有好处 hahaha
完结!撒花 ✿✿ヽ(°▽°)ノ✿
后话
一个PHP的bug已经让我知识储备用尽,那么如果MySQL或者Linux级别的bug出现了那岂不是要开摆,其实有一种防止各种运行环境导致bug的技术,它叫Docker,它不是魔法,它是一个打包的镜像,这个镜像已经安装好了轻量Linux+PHP+MySQL+WP的镜像,都是经过验证的环境,就不会出现问题了,部署的终极解决方案。