一、如果服务器安装多个WordPress,看看其他站点有没有问题,如果有同样的问题,可能是服务器出问题了,联系一下服务商,看看是不是线路或者服务器出问题了。
建议使用阿里云和腾讯云这类服务器,因为一般不会莫名出现这些这类问题,如果出现问题,他们也会很快修复。如果仅仅是该站点的问题,那可能是真的是这个站点的代码出问题。
二、PHP 的内存限制造成的?
很多时候出现白屏是因为,PHP脚本的执行需要大量的内存,而服务器的限制使得PHP脚本得不到满足,比如下面错误代码,这种情况有可能是程序写了死循环了,或者真的需要那么大的内存。
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2348617 bytes) in /www/xxx/wp-includes/plugin.php on line xxx
我们先尝试增大一下 PHP 脚本的内存限制看看能不能解决问题,在 wp-config.php 文件增加下面这行,把限制修改为 256M:
define( 'WP_MEMORY_LIMIT', '256M' );
三、文件权限
还有一个可能引起白屏的原因可能是文件的权限和所有者,这个处理有点麻烦,如果不是很熟悉建议找个专业的人员帮你处理一下。
一般来说对于 WordPress 来说,文件的权限规则是:
文件应该设置为 664 或者 644.
文件夹应该设置为 775 或者 755.
wp-config.php 文件应该设置为 660, 600, 或者 644.
如果你可以使用 SSH 登录你的服务器,可以在 WordPress 根目录下的执行下面这行命令一次搞定:
sudo find . -type f -exec chmod 664 {} +
sudo find . -type d -exec chmod 775 {} +
sudo chmod 660 wp-config.php
四、WordPress 插件冲突
如果还不能解决问题,那么接下来解决 WordPress 致命错误的方法就是先停用所有插件,一般来说一个站点挂了很大原因是一个有问题的插件。
1、 如果还能访问 WordPress 管理后台,最快的方法就是到后台的插件页,选择所有插件,在批量操作下拉菜单中选择停用。
如果停用所有插件之后可以解决问题,那么接下来我们要找出具体是哪个插件导致问题的,一般我们是通过一个一个激活插件来发现,每激活一个插件,在出问题的界面刷新一下,如果问题重现,我们就可以定位是哪个插件出的问题了。
2、如果后台已经无法进入,那就只能通过 FTP 来处理了,进入网站的 wp-content 目录,然后在把 plugins 文件夹改成 plguins-old 目录。
改名之后检查一下网站是否可以访问,如果可以访问,那么接下来要一个一个检查插件了。把插件目录改回「plugins」,然后在插件目录中,对每个插件进行重命名的方法,来定位出问题的插件。我的最近一次错误就是因为迁移wordpress后出现问题,经过这个方法找到google-site-kit这个插件导致的致命错误。
五、WordPress 主题不兼容
如果问题不是插件引起,很可能是主题引起的,所以很多使用 WPJAM Basic 问题大部分是主题引起的,很多主题使用的函数和 WPJAM Basic 函数冲突了。
比如我在博客上介绍一些自己写的一些工具函数,这些的函数都尽量wpjam_开头了,但是有些主题没有改,直接拿过去用了,WPJAMBasic插件里面也有,那么就冲突了。我们可以通过切换回 WordPress 默认的主题来定位问题,如果还能进入后台,那么进入「外观」-「主题」,选择一个默认的 WordPress主题,比如最新的2024,然后在出问题的界面刷新一下,如果问题重现,那就是主题的问题。如果无法进入后台,处理方法和上一节处理插件一样的,使用 FTP 工具进入 wp-content 目录,重命名一下 themes 文件夹。
这样 WordPress 会自动使用最新的默认主题,比如现在就是 2024。最后测试,如果问题重新就是插件的问题了,如果确定是,可以考虑换个主题。
六、浏览器和 WordPress 的缓存
浏览器的缓存和插件的缓存也可能引起致命的错误,建议先清理掉。
如果你安装了缓存插件,比如 WP Rocket 或者 WP Super Cache,最快删除缓存的办法,通过插件的设置页面。
比如 WP Super Cache,在「设置」-「WP Super Cache」-「删除缓存」即可清理掉缓存。
如果无法进入 FTP,那么缓存的文件在 wp-content/caches 目录下,可以进入进行删除操作。
七、开启 WordPress Debug 模式
如果还不能解决问题,那就用最后的大招了,直接定位错误的log,我们是忽略前面的方法直接用这个来解决的。对于程序员来说,出现问题最重要的是知道是什么问题,问题的细节,具体的错误 log,这样就要开启 WordPress Debug 模式。WordPress 提供了 WP_DEBUG WP_DEBUG_DISPLAY 和 WP_DEBUG_LOG 这三个常量让你应对各种情况,下面讲经常经常使用到的方法:
- 如果是前台和后台空白,并且没有显示任何错误。
打开 wp-config.php 文件,将原来的 WP_Debug 设置改成如下设置:
define(‘WP_DEBUG’, true);
define(‘WP_DEBUG_DISPLAY’, true);
这样就可以直接看到错误的信息:
Cannot redeclare get_posts() (previously declared in
/var/www/html/wordpress/wp-includes/post.php:1874) in
/var/www/html/wordpress/wp-content/plugins/test-plugin/test-plugin.php on line 38
比如上面的错误信息就是在 test-plugin 插件定义了 get_post 函数,这个函数 WP 内置了,函数名冲突了。
- 错误是发生在某些后台进程,比如 cron job 或者微信自定义回复的时候,没法显示错误 log,我们可以把 log 保存到 debug 文件。
打开 wp-config.php 文件,将原来的 WP_Debug 设置改成如下设置:
define(‘WP_DEBUG’, true);
define(‘WP_DEBUG_DISPLAY’, false);
define(‘WP_DEBUG_LOG’, true);
然后就可以在 wp-content/debug.log 文件中看到相应的错误信息了。
最后一定要记得,测试完了一定要改回去,就是:
define(‘WP_DEBUG’, false);
不然,你的用户也会看到你的系统错误了,或者 wp-content/debug.log 很大,把你服务器的空间都用完。
附加技巧:增强 PHP 文本处理能力
如果还没有解决你的致命错误,并且错误是发生在文章编辑页,并且很小的概率是因为文章太长造成的。
如果是这种情况,我们可以尝试一下增加回溯和递归限制来增强 PHP 文本处理能力,在 wp-config.php 文件添加下面的代码:
/* 针对特长文章的技巧 */
ini_set(‘pcre.recursion_limit’,20000000);
ini_set(‘pcre.backtrack_limit’,10000000);
完。