为知笔记发布到 wordpress 访问页面空白
二、问题分析
2.1 网络抓包
2.2 nginx 配置
2.3 上网查询
三、解决方法
3.1 首先,找到你的 wp-config.php 文件
3.2 开启 debug 模式
3.3 访问错误页面
3.4 解决步骤
3.5 重启 php-fpm
四、问题总结
一、问题描述
很久没用过为知笔记的自动发布到博客了,今天用它自动发布一篇笔记到我的 wordpress 博客后,发现博客详情页面空白,不仅博客内容不显示了,连博客的分类,标签等内容全部都不显示了。但是奇怪的是其他我手动写的博客详情页面都是正常显示的。
二、问题分析
2.1 网络抓包
出现访问问题的时候,一般首先我都会对网站的请求进行抓包,查看是否有请求失败,但抓包结果显示请求状态全部都是 200,没有问题。
2.2 nginx 配置
因此我的服务器是使用 nginx 代理的,而我对 nginx 又不是特别熟悉。因此,我猜想是不是 nginx 的配置有问题。于是我又查看了 nginx 的配置和访问日志,发现并没有问题。而且如果是配置问题,那么所有文章的详情页都应该是空白才对。
2.3 上网查询
很遗憾,也并没有查到完全匹配的错误信息或者相同经历。但我在查询过程中不经意间看见有人在处理 wordpress 类似空白问题的时候开启了 wp-config.php 中的 debug 模式。于是,仿佛觉得这是一丝希望,虽然我对 php 了解不多,但我猜想可能 debug 模式是类似于 java web 中的 500 错误的 debug 详情页面。后来证明这个方法真的管用~~
三、解决方法
3.1 首先,找到你的 wp-config.php 文件
这个文件的位置是在你的服务器上的 wordpress 的项目根目录下。比如,我网站的项目根目录是在 /data/www/wordpress,那么 wp-config.php 文件就在 /data/www/wordpress/wp-config.php 下。
3.2 开启 debug 模式
登录服务器,找到 wp-config.php 位置,执行如下命令编辑
vi wp-config.php
找到如下行
define('WP_DEBUG', false);
将 false 改为 true,并保存退出。如下示例:
3.3 访问错误页面
在浏览器中访问之前访问出错使页面空白的页面。果然不出所料,然后页面上出现了一行 php 运行时报错信息,如下示例:
Fatal error: Class 'DOMDocument' not found in /data/www/wordpress/wp-content/plugins/jekpack/class.filter-embedded-html-objects.php on line 250
从运行结果来看,明显能看出来是 DOMDocument 类缺失导致 php 程序运行报错,而且也可以大致了解错误产生的原因,为知笔记是通过 www.yourdomain.com/xmlrpc.php 的接口来发布到 wordpress 的。因此,发布的内容生成了 xml 格式,而该格式需要由第三方的 xml 扩展来解析,如果 php 中没有这个 xml 扩展,那么就会报错。但我并不知道该怎么解决。于是拿着此问题去搜索引擎查找,很容易找到了解决办法是安装一个 php-xml 的扩展。
3.4 解决步骤
由于我使用的是 CentOS 的系统,我很容易就想到了使用 yum install php-xml 的方式安装 php 的插件,但发现安装的时候报错,报错信息如下:
Error: php55w-common conflicts with php-common-5.3.3-49.el6.x86_64
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
我知道错误原因是由于我安装的是 php55w 版本,即 php 5.5 版本。而 yum 仓库中的 php 的库是 5.3 版本的,因此出现了冲突,于是使用如下命令安装:
yum install php55w-xml
成功安装 xml
3.5 重启 php-fpm
由于 php-fpm 是一个运行 php 程序的容器(类似于 tomcat)。安装了 php 的扩展之后需要重启服务让其将扩展库加载到容器中,类似于给一个 tomcat 的 web 项目中添加了一个第三方 jar 包,需要重启 tomcat 来加载第三方 jar 原理。于是,执行如下命令重启 php-fpm
service php-fpm restart
重启完成后,再访问之前的出错页面,页面成功访问到。问题解决
四、问题总结
当使用 wordpress 的过程中出现了类似页面全部空白的情况,一般都可能是 php 程序的运行错误,可能是语法错误(几率比较小),或者是缺少第三方扩展的错误(可能性较大)。如果是出现类似情况,可以参考打开开发者模式(Debug 模式),访问页面时会显示 php 程序的运行时错误。不过,只建议查找问题时使用,问题解决后建议关闭此设置(debug 设置为 false)。
赞!