WordPress在后台的“设置——常规”里卡不出来

今天买了新域名之后,就打算把博客给移到新域名上。

服务器的虚拟主机配置很容易,只要修改一下 <VirtualHost> 标签,事情就解决了。但是对于WordPress来说,里面有一些包括页面的链接啊图片等媒体的链接啊,甚至文章里写死的链接,可能还是原来的。我就把整个博客的数据库dump出来,成为包含了大量SQL语句的文本,然后用编辑器的查找替换功能把原来旧域名的字符串替换成新域名的字符串,替换完了再导回去。

为了验证设置,我在博客后台的“设置——常规”里面看了一圈。因为这里包含了WordPress地址和站点地址两个选项。但是我却发现,这个页面加载十分慢,没显示完就卡住不动了。

我第一反应是网络问题,然而挂了代理服务器以后,加载还是这个样子。我在服务器通过top命令查看,发现httpd进程把CPU都吃完了。这很明显是跑PHP跑的。但是这个PHP程序是在运行WordPress,我对这系统又不熟……还好想到了看日志。日志里面提示程序是运行到compat.php的30行出的问题。

在compat.php文件的30行,我看到了是一个_mb_substr函数,在它的上方,就是一段“检查PHP里有没有mb_substr函数,没有就用_mb_substr代替”这样功能的代码。在文件开头的注释里,写了这个文件用于解决例如低版本PHP有些函数没有这样的问题的。怀疑是它做的这个代替mb_substr函数的东西,性能不太行。

我赶忙到网上搜了一下,发现这个mb_substr属于PHP自带功能,在编译PHP的时候可以通过--enable-mbstring这样的开关来开启,但默认是关闭。解决方法看上去很简单,抓PHP的代码下来,配置的时候打开这个开关然后编译安装……很麻烦。所以我就碰碰运气看看有没有现成的。服务器上的系统是NetBSD,在用 pkgin search mbstring 这样搜索之后,果然发现有现成的。那么就直接装这个现成的。在执行了 pkgin install php56-mbstring 之后,重启apache服务器,再尝试进WordPress后台的设置里的常规页面,没有卡死了。

结论是,WordPress在后台的设置里的常规页面会卡死,就是它这个自制的mb_substr性能不行导致的。用了PHP提供的那一套,就好了。

 

另外,在写这篇文章以后,发布出去发现前面参数里 --enable-mbstring 的两个横杠变成了一个破折号。WordPress的这个自动替换也是挺烦人的。网上一搜,有个Quotmarks Replacer插件能禁用这个自动替换,装了就好了。

《WordPress在后台的“设置——常规”里卡不出来》上有1条评论

发表评论