WP Super Cache插件带来的500错误

今天博客服务器(Hostmonster 主机)全站从中午开始出现 500 错误,然后我登陆进 CPanel 各种查看日志、进程、数据库、PHP 状态,均未发现异常。后来又清理 php.ini、.htaccess,重启 PHP,也没有任何改善。只好给客服投了个 Ticket,准备等待客服解决。

后来灵机一动,发现同一主机 host 的其它 WordPress,有的活得很好,有的也是挂掉了。于是用排除法清理 wp-config.php,最终确定是 wp-config.php 中的 WP_CACHE 配置项有问题,删掉之后访问就恢复正常。

define('WP_CACHE', true); //Added by WP-Cache Manager

但由于 WP_CACHE 配置项是 WP Super Cache 自动增加的,一旦登陆进后台,WP Super Cache 就会自动把它再加上,后台页面又会出现 500 错误。于是乎我只好将整个 WP Super Cache 插件干掉(包括 wp-content 下的 php 脚本),终于一切恢复了正常。印象里删掉的 WP Super Cache 的版本是 0.9.9.*。

rm advanced-cache.php backup-*  cache/  wp-cache-config.php plugins/wp-super-cache/ -rf

考虑到 WP Super Cache 还是对性能有一定改善,又看了一下最新版的 WP Super Cache 是 1.0 版,我怀疑是 WP Super Cache 版本较旧造成的问题。虽然该版本已经使用了很长时间,不明白为什么今天才会爆出来 500 错误(也许 Hostmonster 主机程序进行了升级?),我还是装上了最新版本 WP Super Cache 插件。期望它不要再出现类似问题,否则只能弃用了。

既然我的博客不是同一主机上的个例,我想可能在 Hostmonster 上的其它主机也可能会遇到此类问题,特记录下来供参考。

WordPress博客评论合并工具

上篇,这里共享我写的一个用来合并 WordPress 博客评论的小工具。该工具可以将两个镜像 WordPress 博客上对同一篇文章的评论合并起来。

下面先介绍合并的步骤:

1. 首先到这里下载我修改的 WordPress 导入插件,并按照安装一般 WordPress 插件的方式,安装并启用该插件。

2. 然后在 WP 管理后台选择“工具->导入->WordPress”,然后上传从镜像 WP 博客导出的 xml 文件。

3. 在下一步选择“Only Merge Comments” 很重要!!!

Wordpress博客评论合并工具

4. submit,稍等片刻即可。

其实我没有重新制造轮子,只是修改了一下 WordPress 默认的博客导入工具 WordPress Importer,给它加了点儿功能。只要选中“Only Merge Comments”,使用这个工具是很安全的,它只会将 xml 中与当前博客中存在的文章对应的评论添加上去,而不处理任何不存在的文章,也不会重复添加已有的评论,而且会过滤某些垃圾评论。用这个选项,你可以重复导入很多次 :)

可能的缺陷有:这个工具判断文章是否存在的唯一标准是文章标题,因此如果有多篇文章标题一样,可能会存在问题(未测试)。本人不保证它是充分测试的,因此在应用之前最好还是在本地的镜像测试后进行;如果没有进行测试,请一定在合并之前对博客进行备份

下面是我修改的 patch:

--- wordpress-importer/wordpress-importer.php    2010-06-02 00:38:23.000000000 +0800
+++ ../../www/blog/wp-content/plugins/wordpress-importer/wordpress-importer.php    2010-09-29 19:33:57.953790929 +0800
@@ -49,2 +49,3 @@
     var $fetch_attachments = false;
+    var $only_merge_comments = false;
     var $url_remap = array ();
@@ -258,2 +259,7 @@

+<h2><?php _e('Only Merge Comments', 'wordpress-importer'); ?></h2>
+<p>
+    <input type="checkbox" value="1" name="comments" id="merge-comments" />
+    <label for="merge-comments"><?php _e('Only merge comments, ignore post, tags...', 'wordpress-importer') ?></label>
+</p>
<?php
@@ -483,3 +489,7 @@

-        $post_exists = post_exists($post_title, '', $post_date);
+        if ($this->only_merge_comments) {
+            $post_exists = post_exists($post_title, '', '');
+        } else {
+            $post_exists = post_exists($post_title, '', $post_date);
+        }

@@ -489,4 +499,7 @@
             $comment_post_ID = $post_id = $post_exists;
-        } else {
-
+        } else if ( $this->only_merge_comments) {
+            echo '<li>';
+            printf(__('Post <em>%s</em> not found, comments not updated.', 'wordpress-importer'), stripslashes($post_title));
+            $comment_post_ID = $post_id = $post_exists;
+        } else {
             // If it has parent, process parent first.
@@ -605,3 +618,11 @@
                 // if this is a new post we can skip the comment_exists() check
-                if ( !$post_exists || !comment_exists($comment['comment_author'], $comment['comment_date']) ) {
+                if ($this->only_merge_comments) {
+                    if ( $post_exists && !comment_exists($comment['comment_author'], $comment['comment_date']) && $comment['comment_author'] != 'Unknown') {
+                        if (isset($inserted_comments[$comment['comment_parent']]))
+                            $comment['comment_parent'] = $inserted_comments[$comment['comment_parent']];
+                        $comment = wp_filter_comment($comment);
+                        $inserted_comments[$key] = wp_insert_comment($comment);
+                        $num_comments++;
+                    }
+                } else if ( !$post_exists || !comment_exists($comment['comment_author'], $comment['comment_date']) ) {
                     if (isset($inserted_comments[$comment['comment_parent']]))
@@ -847,5 +868,7 @@
         $this->get_entries();
-        $this->process_categories();
-        $this->process_tags();
-        $this->process_terms();
+        if ($this->only_merge_comments) {
+            $this->process_categories();
+            $this->process_tags();
+            $this->process_terms();
+        }
         $result = $this->process_posts();
@@ -891,2 +914,4 @@
                 $fetch_attachments = ! empty( $_POST['attachments'] );
+                $only_merge_comments = ! empty( $_POST['comments'] );
+                $this->only_merge_comments = (bool) $only_merge_comments;
                 $result = $this->import( $_GET['id'], $fetch_attachments);

悲剧的 MSN Space

MSN Space 总算倒了,所有用户都要求被迁往 wordpress.com,或者下载备份文件。话说我第一个用得顺手的 blog 还是 MSN Space,也用了很长的时间,不免觉得有些悲凉。

今天有同事问我,MSN Space 为什么混到这个地步?我说,本来 MSN Space 还凑合可用,但是每一次改版、每一次改名,都让你觉得更加难用。产品能做到这个份上,也真是不容易,不过无独有偶,MSN 也算得上跟它的绝配了!不知道什么时候能看到 MSN 整体搬迁用户到 AIM 或者改版到 XMPP?

哦,我又忘了,国内还有个飞信呢!不愧是外包给 MSN 做的产品,看看现在的飞信 4.x,我好怀念飞信 3.x 啊!

这件事情让我感兴趣的一点是,我总算看到一个可能,可以将以前在 MSN Space 上的评论,合并到现在的博客中了。或许需要自己写个小工具,假期可以尝试做一下。

WordPress 2.8 和 2.8.1 beta1 毛病真多

前两天我才在 Twitter 炫耀了一下我忍住没当小白的努力,没想到昨天晚上被哥们一忽悠,他说他没有发现 WP 2.8 的 bug,就升级了一下 WordPress 到 2.8。很惨痛呀!

先是升级到 2.8,发现控制板引入链接内存分配失败,fatal error,然后控制台的链接点了都没用。这也是在官方 2.8.1 Beta1 对 2.8 修补的时候说明了的:

Dashboard memory usage is reduced. Some people were running out of memory when loading the dashboard, resulting in an incomplete page.

于是我说升级到 2.8.1 Beta1 呗,控制台是差不多加载完了,插件不好用了。Google Sitemap 插件内存分配失败,fatal error;编辑插件文件内存分配失败,fatal error。

于是我不能忍了,回退到 2.7.1,世界真美好呀!

博客迁出 yo2.cn

近两年以来我都是使用的 yo2.cn 提供的博客托管服务,就是说 yo2.cn 提供一个 WordPress 空间,我将域名 blog.solrex.cn 绑定到这个空间上。对 yo2.cn 的服务,总的来说,我还是基本满意的,不然我也不会一年后续费继续使用。但是一直以来的服务器不稳定,尤其是最近两个月来的宕机事件,让我对 yo2.cn 的服务失去了信心。09 年 3 月 14 日到 17 日,09 年 5 月 12 日到 15 日,两个月里两次长达三天的宕机事件在我的 Google Analytics 中划出了两个漂亮的谷底!我只好说,拜拜了 yo2。

以前之所以选择 yo2.cn 的服务,主要原因是(1)懒得折腾 WP 系统(2)它的服务器在国内,教育网用户可以无障碍访问(至少我女朋友在使用 CERNET)。这次将博客迁移到国外主机上,可能会造成部分教育网用户无法访问,请见谅。如果您希望继续关注此博客,请使用 Google Reader抓虾等在线阅读器订阅此博客的 RSS

现在博客的系统和主题和原来保持一致,域名也没有变化,所以对一般读者来说,访问没有任何影响。在某些网络状况下,可能速度会比原来慢一点儿;DNS 没有刷新的网络,可能要等待blog.solrex.cn域名记录的刷新;在一些存在缓存的浏览器中,可能要重刷一下缓存。

对于我来说,却是方便了许多,得到了对 WordPress 系统的完全控制,也没有了关键字的过滤,使用起来就没那么窝心了。

惊艳 rin-wendy.com

这个网站的 WordPress 主题太——漂亮了!!!太可爱了!!!太喜欢了!!!

http://rin-wendy.com/

别找了,作者没有释出主题下载。国内论坛上曾经有人用蜘蛛抠下来了主题文件,但是碰巧 Rin 其实也是华人,人家能看懂中文。在 Rin 的强烈反对下都被删贴了。

我好喜欢这样的主题呀!不知道哪里有类似的释出的主题下载?我拿来自己改改也成呀!

一些关于博客的小变动

2007 年 2 月 03 日,我的博客从最早的 MSN Space迁移到 Blogspot,看着中文标题导致的类似于“%e8%90%bd%e5%8f%b6”的中文链接感觉特别不爽,就开始试着用使用英文标题。

2007 年 6 月 18 日,又迁移到 Yo2 的博客托管服务,开始使用 WordPress 博客和自己的域名。由于对国内的博客托管不是很放心,也一直在同时更新 SpaceBlogspot。为了格式统一,继续使用英文标题。

转眼间已经一年半,除了关键词过滤,我对 Yo2 的服务还是比较满意的。也越来越喜欢 WP 博客,尤其是发现 WP 能几乎完美地支持整站迁移文章、评论和主题之后。再加上我还可以手动备份数据,就可以随时在别的主机上恢复整个站点,那么另外两个博客就没什么必要了。今天我把 http://solrex.blogspot.com 给关了,地址会重定向到 http://blog.solrex.cnhttp://solrex.space.live.com 继续保留,但只发一些生活类文章,主要为 MSN 好友共享,技术类文章就不贴过去了。

既然专注于 WP 博客,WP 有 WP slug translate 插件,可以将中文标题自动翻译或者转成拼音,而且也可以自定义链接地址,那我就不用费尽心机想英文标题了,以后标题就能随便写了。估计一个直接的后果是...牢骚文章增多

取下装逼 FAQ 中的“为什么你的博客文章总是使用英文标题?”那段,是以为记:

为什么你的博客文章总是使用英文标题?

主要原因是为了使链接好看。

刚开始写博客的时候,用的是微软的 MSN Space,Space 不区分中文和英文标题,所有产生的链接都是处理过的乱码串。后来我的博客迁移到 Google 的 Blogspot,Blogspot 在文章的链接中不对标题进行处理,所以如果使用中文标题,文章链接中就会出现成串的%XX%XX用来代替汉字的转义字符串,非常不利于将链接贴到其它地方,也不利于网站流量的监控,所以从那时起我就采用全英文的标题了。

而且我发现使用全英文的标题还有一个好处,使我每次写文章的时候都要仔细考虑标题和内容的关系,避免了我写一些垃圾文章。

开始使用 WordPress

先引用一段著名的对话:
A: 你有博客吗?
B: 有。
A: 你介意换一个 BSP(Blog Service Provider) 吗?
B: 介意。
A: 你介意多一个 BSP 吗?
B: ......

总之呢,就是想说,在和菜头的竭力推荐下,在 GFW 的竭力阻拦下,在 Live Space 的竭力变慢下,我又在 yo2.cn 申请了一个博客。至于 yo2.cn 有什么好,请访问 http://www.hecaitou.net ,翻翻以前的文章,你就可以大致了解了。

现在算是把域名 blog.solrex.cn 绑定到了 yo2.cn 的博客上了,不是原来的域名转向,是绑定,就是所有文章什么的都可以用这个域名访问。据说这项服务以后要收费,其实收费没什么,自己申请一个空间一年还得好几百呢,还得自己配置 WP(WordPress),我也是因为懒得配置才不愿意找这个麻烦。最关键的是服务,QoS,我可不再希望自己花费了很多心血在上面的博客说被封就被封了,而且还不是我的责任,是 BSP 没有做好公关。这两年 livespace 和 blogspot 经常性的出问题已经很讨厌了,希望 yo2.cn 这个国内的博客服务商在这方面能做好一些。稍微慢一点儿没关系,发文章麻烦一点儿没关系,但别不能访问。

WP 挺好的,用起来很舒服,而且可以有很多自由度。我还把以前所有的文章都迁移到了现在的站点上,加起来有两百七十多篇吧。哈哈,两年,看来写的不少。

如果 yo2.cn 能保持现在这种服务,年费我愿意交。本想等用一段稳定了再重烧 feedburner,但昨天还是忍不住重烧了一下,所以可能使用 feedburner 订阅我的博客的就看到了今天有很多旧的更新 :)。不过这下再从 feed 中点进去到网站就不是 live space 了,留言也不用登录了,可惜的是,feedburner 教育网还是无法访问。唉,为什么在中国上个网就那么难呢?

最后重申一下,欢迎访问新博客。Live Space 和 Blogspot 仍然保持同步更新,没办法啊,我对中国小网站的风险抵抗能力还是持怀疑态度的。如果 yo2.cn 能保持一年不频繁停机、不被封站、并保持服务质量,我就放弃那两个博客。