WordPress自动安装本地升级包

自从安装了WordPress,升级工作一直不太顺利。本地搭建的LAMP环境测试没问题,但虚拟空间真刀真枪的时候就每每提示自动升级失败。试过手动升级,小心地覆盖各个文件夹时候心揪的稀碎啊,特别是WordPress不解风情地老推送升级包过来。

社区讨论最多升级失败都归咎于文件夹权限没设置好。但我这个调来调去发现就是虚拟主机访问WordPress资源站点,耽搁的太久,超时带来的副作用。

所以自己走VPN下载升级包是在所难免了。不过比起手动升级,把升级包下载到站点目录,然后让WordPress自动升级还是能省不少心,也就是自动安装本地升级包。唯一要做的就是稍微hack一下升级代码。以升级WordPress 4.4为例,修改代码示例:

// .wp-adminincludesclass-wp-upgrader.php

public function download_package( $package ) {
  ...
  //d:\www\root\xxxwordpress-4.4-zh_CN.zip是升级包传到虚拟主机后的绝对路径
  if ($package == "https://downloads.wordpress.org/release/zh_CN/wordpress-4.4.zip")
    $download_file = "d:\wwwroot\xxx\wordpress-4.4-zh_CN.zip";
  else
    $download_file = download_url($package);
  ...
}

大迁徙

最开始弄黑捷克是在07年前后(一个曾经属于ASP+ACCESS的天下),选的也是当时流行的PJBLOG博客系统。眼看着互联网淘金热潮,就也照猫画虎地把喜欢看的魔术有一集写一篇,还从网上找来很多热门网文摘抄凑数,就想着流量折算Google Adsense好套点美金出来。再后来经历过实名制,域名备案,数据库错乱等一系列暴风骤雨的洗礼,直到2012年才算是真正安顿下来。虽然FckEditor写日志每次都得删改格式去匹配说不清道不明的样式风格,但觉得平静的生活来之不易,就此收刀,隐匿于和平饭店。

忙乱时向往闲暇,做梦都在计划,可真有空坐下来,就傻傻地坐到起身,哦还有个梦呢。因为成长于乱世,习惯于自寻平静,就像堆栈的push和pop,在两者见往复平衡才能让程序正常执行。平静久了,一味地pop,反而是在挥霍明媚的青春。想到这里,独裁者起身,手指欧洲,对着镜子歇斯底里的吼叫,让日耳曼的铁蹄踏平那里。

PJBLOG到Wordpress的转换,至少得处理三件棘手的事儿:日志,评论,链接的转换。

日志和评论的转换参考了http://maie.name/511.html,里面提到了一个mt.asp的转换程序,可以将原日志从ACCESS拽出来,格式化为Wordpress支持的一种导入文件。好容易找到了一份mt.asp,发现导出时就是无响应,大概是空间商做了限制,post请求的响应过大就中止,可能是出于dos的考虑吧。修改了mt.asp,让输出写入文件,然后用ftp连上去再下载吧。修改的内容还包括通过BASENAME让Wordpress的日志编号和原文章编号一致,方便重定向。这样导入日志后,index.php/xxx/就对应原来的article.asp?id=xxx了。另外要装上Wp-postview插件,这样还可以把浏览次数也迁移过来。mt.asp使用前要修改里面的https://www.hhjack.com.cn/为自己的博客地址。分享一下我的修改版本:点击下载

当然这只是第一步,后面就是漫长的人肉改日志了,因为很多日志用了html方式编写,导入后就很多编码问题,只能一篇一篇的修改了。我是新老站点同时在线,格式有错乱的,就直接贴老html代码过来,然后再调整。时至今日,已经不打算博取流量广告淘金了,只想着踏踏实实记录生活点滴,所以陈旧,错乱摘抄,失效外链,广告代码,遇到就毫不体面的全部删掉。

链接的转换是保证搜索引擎以前收录的URL仍然可以指向到新系统的日志。也就是用.htaccess文件实现301重定向,我这空间是windows系统,就用iis_rewrite的httpd.conf来跳转。httpd.conf文件内容为:

[ISAPI_Rewrite]
3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32

RewriteCond %{REQUEST_URI} ^/article.asp$
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^.*$ https://www.hhjack.com.cn/index.php/%1/? [R=301,L]

RewriteCond %{REQUEST_URI} ^/default.asp$
RewriteCond %{QUERY_STRING} ^tag=(.*)$
RewriteRule ^.*$ https://www.hhjack.com.cn/index.php/tag/%1/? [R=301,L]

RewriteCond %{REQUEST_URI} ^/default.asp$
RewriteCond %{QUERY_STRING} ^cateID=7$
RewriteRule ^.*$ https://www.hhjack.com.cn/index.php/category/call-others/? [R=301,L]
RewriteCond %{REQUEST_URI} ^/default.asp$
RewriteCond %{QUERY_STRING} ^cateID=12$
RewriteRule ^.*$ https://www.hhjack.com.cn/index.php/category/sch00l-days/? [R=301,L]
RewriteCond %{REQUEST_URI} ^/default.asp$
RewriteCond %{QUERY_STRING} ^cateID=9$
RewriteRule ^.*$ https://www.hhjack.com.cn/index.php/category/magicshow/? [R=301,L]
RewriteCond %{REQUEST_URI} ^/default.asp$
RewriteCond %{QUERY_STRING} ^cateID=10$
RewriteRule ^.*$ https://www.hhjack.com.cn/index.php/category/x-life/? [R=301,L]

由于日志导出过程就保证了序号的同步,所以只要定向article.asp?id=xxx到index.php/xxx即可,tag的定向方法类似。最后还要处理文章分类的定向,这个是从序号到名字,所以只能每类写一条,还好条目不多,不然定向会很耗时。

大框架就是这些,剩下的就是安装插件,调整样式和过去尽量相仿,修改字体,迁移附件等了。在虚拟机军事演习了两周,实战三天两夜,finally。