吐血整理:碰到WordPress致命错误,如何一步一步解决
WordPress 用户最头疼的问题就是站点白屏打不开了,或者后台进不去了,这就是 WordPress 的致命错误,英文是 White Screen of Death(白屏错误),简称:WSoD。
同样类似的,使用 WPJAM Basic 插件的用户,问得最多的问题是:为什么开启 WPJAM Basic 之后,xxx 主题不可用,xxx 插件用不了呢?
其实这些都是因为兼容问题,造成了 WordPress 致命错误。一般我的建议是停用其他插件,换用默认主题,看看还有没有问题,然后一个一个排除。
下面我们详细讲解一下什么是 WordPress 致命错误,我们怎么一步一步定位它和解决它。
文章目录
什么是 WordPress 致命错误
就是网站平常访问没有问题,突然屏蔽成了白屏了,也可能因为使用不同的浏览器得到不同的错误信息,比如在 Chrome 浏览器下显示的 HTTP 500 错误:
如果火狐浏览器,那么就是白屏了,没有任何有用的信息:
如果 WordPress 开启了致命错误处理,那么就会显示下面的信息:
WordPress 的致命错误都是 PHP 代码错误引起,或者内存限制引起的,一般是一些错误的主题或者插件的代码,比如插件和主题使用了相同的函数,造成冲突了。
所以 WPJAM Basic 插件的大部分问题就是上面所说,其他插件或者主题使用和 WPJAM Basic 相同的函数或者类库,造成了冲突引起的。
那么怎么解决这些问题呢?
仅仅是本站还是所有站点?
如果服务器安装多个 WordPress,看看其他站点有没有问题,如果有同样的问题,可能是服务器出问题了,联系一下服务商,看看是不是线路或者服务器出问题了。
这也是我一直建议使用阿里云和腾讯云这类服务器,因为一般不会莫名出现这类问题,如果出现问题,他们也会很快修复。
如果仅仅是该站点的问题,那可能是真的是这个站点的代码出问题了,那就针对该站点就行深究了。
PHP 的内存限制造成的?
很多时候出现白屏是因为,PHP 脚本的执行需要大量的内存,而服务器的限制使得 PHP 脚本得不到满足,比如下面的错误代码,这种情况有可能是程序写了死循环了,或者真的需要那么大的内存。
1 |
<span id="1bb10341-fbd3-4801-b0fe-9a1c51010baa" style="font-size:18px;margin:20px 0px;text-align:left;">Fatal</span><span id="ef8538b8-aa24-4bd8-b3e3-219a6d77427b" style="font-size:18px;margin:20px 0px;text-align:left;">error</span>: Allowed memory size of<span id="03778314-977a-4d40-b4c9-a80ae2f83c0f" style="font-size:18px;margin:20px 0px;text-align:left;">33554432</span>bytes exhausted (tried to allocate<span id="8a6a25b1-22a7-44ed-83f1-606f1d45b2bf" style="font-size:18px;margin:20px 0px;text-align:left;">2348617</span>bytes) in /www/xxx/wp-includes/plugin.php<span id="970958ae-7460-487e-ba32-e1c978f73dfe" style="font-size:18px;margin:20px 0px;text-align:left;">on</span>line xxx |
我们先尝试增大一下 PHP 脚本的内存限制看看能不能解决问题,在 wp-config.php 文件增加下面这行,把限制修改为 256M:
1 |
<span id="1e8a15e8-9c1e-4689-8497-7f70193be1d2" style="font-size:18px;margin:20px 0px;text-align:left;">define</span>(<span id="d93e1098-879a-41e1-ae16-cb86cfbb0b45" style="font-size:18px;margin:20px 0px;text-align:left;">WP_MEMORY_LIMIT</span>,<span id="1a6ae7b3-4d4a-4373-8859-2c44a26a139e" style="font-size:18px;margin:20px 0px;text-align:left;">256M</span>); |
文件权限引起问题?
还有一个可能引起白屏的原因可能是文件的权限和所有者,这个处理有点麻烦,如果不是很熟悉建议找个专业的人员帮你处理一下。
一般来说对于 WordPress 来说,文件的权限规则是:
- 文件应该设置为 664 或者 644.
- 文件夹应该设置为 775 或者 755.
- wp-config.php文件应该设置为 660, 600, 或者 644.
如果你可以使用 SSH 登录你的服务器,可以在 WordPress 根目录下的执行下面这行命令一次搞定:
1 2 3 |
sudo<span id="fdc913bb-fa23-415e-8d29-fe33d03c1fbd" style="font-size:18px;margin:20px 0px;text-align:left;">find</span>. -<span id="05817c0c-6260-4a19-9a58-e7b2ed2b3450" style="font-size:18px;margin:20px 0px;text-align:left;">type</span>f -exec chmod<span id="52fab064-cdee-4425-be49-13d1e2f0fd47" style="font-size:18px;margin:20px 0px;text-align:left;">664</span>{} sudo<span id="481aca2a-427b-42be-821e-b11bbf2c95c8" style="font-size:18px;margin:20px 0px;text-align:left;">find</span>. -<span id="42b37408-f92a-4889-bcbf-a100ce065da6" style="font-size:18px;margin:20px 0px;text-align:left;">type</span>d -exec chmod<span id="576483d5-6b98-4d37-a1be-ff14cbf68552" style="font-size:18px;margin:20px 0px;text-align:left;">775</span>{} sudo chmod<span id="aa799148-85dc-4c61-996a-05dd5704c15b" style="font-size:18px;margin:20px 0px;text-align:left;">660</span>wp-<span id="34a20028-bc08-4413-86dc-d059c6d502c4" style="font-size:18px;margin:20px 0px;text-align:left;">config</span>.php |
WordPress 插件冲突了?
如果还不能解决问题,那么接下来,解决 WordPress 致命错误的方法就是先停用所有插件,一般来说一个站点挂了很大原因是一个有问题的插件。
1. 如果还能访问 WordPress 管理后台,最快的方法就是到后台的插件页,选择所有插件,在批量操作下拉菜单中选择停用。
如果停用所有插件之后可以解决问题,那么接下来我们要找出具体是哪个插件导致问题的,一般我们是通过一个一个激活插件来发现,每激活一个插件,在出问题的界面刷新一下,如果问题重现,我们就可以定位是哪个插件出的问题了。
2. 如果后台已经无法进入,那就只能通过 FTP 来处理了,进入网站的wp-content目录,然后再把plugins文件夹改成plguins-old目录。
改名之后检查一下网站是否可以访问,如果可以访问,那么接下来要一个一个检查插件了。把插件目录改回“plugins”,然后在插件目录中,对每个插件进行重命名的方法,来定位出问题的插件。
WordPress 主题不兼容?
如果问题不是插件引起,很可能是主题引起的,所以很多使用 WPJAM Basic 问题大部分是主题引起的,很多主题使用的函数和 WPJAM Basic 函数冲突了。
比如我在博客上介绍一些自己写的一些工具函数,这些函数都尽量wpjam_开头了,但是有些主题没有改,直接拿过去用了,WPJAM Basic 插件里面也有,那么就冲突了。
1. 我们可以通过切换回 WordPress 默认的主题来定位问题,如果还能进入后台,那么进入“外观”-“主题”,选择一个默认的 WordPress 主题,比如最新的 2021:
然后在出问题的界面刷新一下,如果问题重现,那就是主题的问题。
2. 如果无法进入后台,处理方法和上一节处理插件一样的,使用 FTP 工具进入wp-content目录,重命名一下themes文件夹。
这样 WordPress 会自动使用最新的默认主题,比如现在就是 2021。最后测试,如果问题重现就是插件的问题了,如果确定是,可以考虑换个主题。
浏览器和 WordPress 的缓存有问题?
浏览器的缓存和插件的缓存也可能引起致命的错误,建议先清理掉。
如果你安装了缓存插件,比如 WP Rocket 或者 WP Super Cache,最快删除缓存的办法,通过插件的设置页面。
比如 WP Super Cache,在“设置”-“WP Super Cache”-“删除缓存”即可清理掉缓存。
如果无法进入 FTP,那么缓存的文件在wp-content/caches目录下,可以进入进行删除操作。
放大招:开启 WordPress Debug 模式
如果还不能解决问题,那就用最后的大招了,直接定位错误的 log,我们是忽略前面的方法直接用这个来解决的。
对于程序员来说,出现问题最重要的是知道是什么问题,问题的细节,具体的错误 log,这样就要开启 WordPress Debug 模式。
WordPress 提供了WP_DEBUGWP_DEBUG_DISPLAY和WP_DEBUG_LOG这三个常量让你应对各种情况,下面讲经常经常使用到的方法:
1.如果是前台和后台空白,并且没有显示任何错误。
打开 wp-config.php 文件,将原来的 WP_Debug 设置改成如下设置:
1 2 |
define(<span id="58fd37a4-6e7d-4008-aa2f-7d83d888f01c" style="font-size:18px;margin:20px 0px;text-align:left;">WP_DEBUG</span>,<span id="07ab95d7-3e1b-425f-8fea-3877057ad140" style="font-size:18px;margin:20px 0px;text-align:left;">true</span>); define(<span id="454a6379-fe1b-4b48-8dac-b4a76172c806" style="font-size:18px;margin:20px 0px;text-align:left;">WP_DEBUG_DISPLAY</span>,<span id="91df1a4d-efac-4cab-b88a-831dacdb35ee" style="font-size:18px;margin:20px 0px;text-align:left;">true</span>); |
这样就可以直接看到错误的信息:
1 |
<span id="7832fb7d-f478-4a87-9213-d3c3d2f73d1d" style="font-size:18px;margin:20px 0px;text-align:left;">Cannot redeclare<span id="bee6b5b1-78a2-4630-bf3d-86795ce2e56b" style="font-size:18px;margin:20px 0px;text-align:left;">get_posts</span>() (<span id="8ef9848b-4fff-446a-88a1-ccaeffb85570" style="font-size:18px;margin:20px 0px;text-align:left;">previously declared<span id="aa5b7908-fc8f-4388-89e7-548176308bbb" style="font-size:18px;margin:20px 0px;text-align:left;">in</span>/<span id="91493cda-5235-48d2-bcd4-94b53ffa1f91" style="font-size:18px;margin:20px 0px;text-align:left;">var</span>/www/html/wordpress/wp-includes/post.php:<span id="b7de000e-8e40-4d75-9699-360d57bbf017" style="font-size:18px;margin:20px 0px;text-align:left;">1874</span></span>)<span id="e8eb46ad-f45b-4502-9194-b9851d292e3e" style="font-size:18px;margin:20px 0px;text-align:left;">in</span>/<span id="8e143bed-d7bf-4df7-b54e-39ac1829e974" style="font-size:18px;margin:20px 0px;text-align:left;">var</span>/www/html/wordpress/wp-content/plugins/test-plugin/test-plugin.php<span id="3061c36f-ecb7-4186-8551-edf4efb4116f" style="font-size:18px;margin:20px 0px;text-align:left;">on</span>line 38</span> |
比如上面的错误信息就是在test-plugin插件定义了get_post函数,这个函数 WP 内置了,函数名冲突了。
2.错误是发生在某些后台进程,比如 cron job 或者微信自定义回复的时候,没法显示错误 log,我们可以把 log 保存到 debug 文件。
打开 wp-config.php 文件,将原来的 WP_Debug 设置改成如下设置:
1 2 3 |
define(<span id="b312edec-9caf-4f00-8447-901f2fcddd1c" style="font-size:18px;margin:20px 0px;text-align:left;">WP_DEBUG</span>,<span id="66e88c82-8fd7-4429-a80a-12e393514d24" style="font-size:18px;margin:20px 0px;text-align:left;">true</span>); define(<span id="4fa1c4a5-f716-4343-b238-5e42a0a55d32" style="font-size:18px;margin:20px 0px;text-align:left;">WP_DEBUG_DISPLAY</span>,<span id="6361c8b3-88f1-4977-92c9-1a4a6121a5fd" style="font-size:18px;margin:20px 0px;text-align:left;">false</span>); define(<span id="0d3860eb-0881-4624-bd1e-5f81f5fb8d77" style="font-size:18px;margin:20px 0px;text-align:left;">WP_DEBUG_LOG</span>,<span id="90458b17-a4ca-4750-ad02-68dee50c2153" style="font-size:18px;margin:20px 0px;text-align:left;">true</span>); |
然后就可以在wp-content/debug.log文件中看到相应的错误信息了。
最后一定要记得,测试完了一定要改回去,就是:
1 |
define(<span id="8d6cad8c-3640-4613-a300-1639c07248b7" style="font-size:18px;margin:20px 0px;text-align:left;">WP_DEBUG</span>,<span id="39e515f1-a47f-4c40-abdc-3abdc67092d1" style="font-size:18px;margin:20px 0px;text-align:left;">false</span>); |
不然,你的用户也会看到你的系统错误了,或者wp-content/debug.log很大,把你服务器的空间都用完。
附加技巧:增强 PHP 文本处理能力
如果还没有解决你的致命错误,并且错误是发生在文章编辑页,并且很小的概率是因为文章太长造成的。
如果是这种情况,我们可以尝试一下增加回溯和递归限制来增强 PHP 文本处理能力,在wp-config.php文件添加下面的代码:
1 |
<span id="5167a2c4-2866-4ccf-91e4-7fdc7df31889" style="font-size:18px;margin:20px 0px;text-align:left;">/* 针对超长文章的技巧 */</span><span id="7e3322a7-5ba7-474b-80e0-01e08a1267b3" style="font-size:18px;margin:20px 0px;text-align:left;">ini_set</span>(<span id="84b440db-c99c-4c4b-9397-07a1052eb37f" style="font-size:18px;margin:20px 0px;text-align:left;">pcre.recursion_limit</span>,<span id="32452ee0-12b6-41b1-87d6-8d5cbdf8642e" style="font-size:18px;margin:20px 0px;text-align:left;">20000000</span>);<span id="575aa91c-f491-4be9-a668-04f7c8e7654d" style="font-size:18px;margin:20px 0px;text-align:left;">ini_set</span>(<span id="ba71f60e-929e-4f06-9c02-df13d0d762f4" style="font-size:18px;margin:20px 0px;text-align:left;">pcre.backtrack_limit</span>,<span id="f00ee91a-27c8-49ab-97ed-102a0792ae89" style="font-size:18px;margin:20px 0px;text-align:left;">10000000</span>); |
总结:耐心处理和提供 log
WordPress 出现了致命错误并不可怕,按照这篇文章提示的方法一步一步整理,总能解决问题的,所以也欢迎收藏本文,方便以后碰到问题方便处理。
同样使用 WPJAM Basic 出现问题之后,也不要惊慌失措,也不要直接来说出问题了,然后没有任何细节,这样谁也帮不了你,毕竟程序员也是凡人,不是神。
一般建议按照这里的方法先自己解决一遍,最后不行,只要给到相关的错误的 log(特别关注一下前面关于如何生成 log 的部分),我们都是可以帮忙定位到问题,然后解决的。
如果你使用的主机造成的问题,建议切换到阿里云和腾讯云,还是推荐使用我的链接,给我赚点佣金,才有更大动力写教程。
1. 带 [亲测] 说明源码已经被站长亲测过!
2. 下载后的源码请在24小时内删除,仅供学习用途!
3. 分享目的仅供大家学习和交流,请不要用于商业用途!
4. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
5. 本站所有资源来源于站长上传和网络,如有侵权请邮件联系站长!
6. 没带 [亲测] 代表站长时间紧促,站长会保持每天更新 [亲测] 源码 !
7. 盗版ripro用户购买ripro美化无担保,若设置不成功/不生效我们不支持退款!
8. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
9. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
10.如果您购买了某个产品,而我们还没来得及更新,请联系站长或留言催更,谢谢理解 !
GG资源网 » 吐血整理:碰到WordPress致命错误,如何一步一步解决