<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WilliamGates Blog &#187; 折腾</title>
	<atom:link href="http://blog.williamgates.biz/tag/%e6%8a%98%e8%85%be/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.williamgates.biz</link>
	<description>四片叶子的三叶草</description>
	<lastBuildDate>Fri, 11 Nov 2011 14:32:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>再谈不要乱改Android的hosts文件</title>
		<link>http://blog.williamgates.biz/2011/11/do-not-and-do-not-edit-hosts-of-android/</link>
		<comments>http://blog.williamgates.biz/2011/11/do-not-and-do-not-edit-hosts-of-android/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 14:25:58 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[技术心得]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[折腾]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/?p=463</guid>
		<description><![CDATA[　　前段时间写过一篇文章，告诉大家不要乱改自己android手机的hosts文件。最近经过研究发现，不要乱改这个结论是对的，但是是不够的，正确的结论应该是——最好什么也别改，除非你真的知道自己在做什么。 　　请大家不要参考我那篇文章中推荐保留的hosts记录，因为几乎全都不需要而且可能带来访问某些服务的障碍。放弃上次的思路，这次我们从完全不用hosts文件出发，发现不同于PC上，手机的网络上大部分google服务是可以正常使用的，不需要修改hosts。只有少数的服务不能用/不太好用，所以我们从0开始，一条条添加hosts记录而不是删除没用的，下面我们就来一条条列举： 　　1、google listen 　　是的，你没有看错，如此小众的服务才会需要hosts的帮助，因为这个不受google待见的小app使用了appspot——后果你懂的。我们需要在hosts中加入如下一句： 203.208.46.148 lfe-alpo-gm.appspot.com 　　2、music beta by google 　　稍微大众一些的服务了，这个还是比较有价值的。它在国内的网络上的问题很有趣：使用了常用的hosts文件就会不能同步音乐列表，但是去掉hosts文件就会无法播放。为此，你需要确定你的hosts文件中没有这个网址googleapis.l.google.com和这个网址www.googleapis.com，这两个中的某一个（今天白天我实验出来的，现在忘了……）只要设置成google.cn系列的IP，就会导致它不能同步。为了播放音乐，你需要添加以下内容 203.208.46.148 music.google.com 203.208.46.148 t.doc-0-0-sj.sj.googleusercontent.com 203.208.46.148 music-streaming.l.google.com 203.208.46.148 music.googleusercontent.com 203.208.46.148 uploadsj.clients.google.com 203.208.46.148 large-uploads.l.google.com 　　3、google docs 　　这个是重头戏，倒不是因为docs有多么重要，关键是因为这玩意太需要天时地利人和了。 　　首先，你不能有这条记录apis.google.com，不管你设置的是什么IP，只要有这个域名就不行。 　　其次，你必须有这条记录 209.85.225.101 docs.google.com 　　注意，既不是google.cn系的IP，也不是你用just-ping得到的香港IP——中文地区用的IP似乎都被过滤了google docs，只有这个欧美用的（根据just-ping的结果）IP似乎勉强能用，但还是断断续续、时好时坏、长文件也很难完整载入 　　最后，你最好去掉所有的google.com/www.google.com/www.l.google.com等与web访问相关的记录，docs在打开文件的时候有一个复杂的跳转过程，其中似乎会访问到google.com系列的域名，（不是十分确定的）只要你在这些域名上使用了google.cn系IP就会出错。 　　4、其他 　　也许你需要在手机上通过浏览器访问一些google服务，那么也许你可以加上这些： 203.208.46.148 feedburner.google.com 203.208.46.148 www.feedburner.com 203.208.46.148 feeds.feedburner.com 203.208.46.148 feeds2.feedburner.com 203.208.46.148 feedproxy.google.com 203.208.46.148 goo.gl 203.208.46.148 g.co 203.208.46.148 groups.google.com 203.208.46.148 groups.google.cn 203.208.46.148 [...]]]></description>
			<content:encoded><![CDATA[<p>　　前段时间写过<a href="http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/">一篇文章</a>，告诉大家不要乱改自己android手机的hosts文件。最近经过研究发现，不要乱改这个结论是对的，但是是不够的，正确的结论应该是——最好什么也别改，除非你真的知道自己在做什么。<br />
　　<strong>请大家不要参考我<a href="http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/">那篇文章</a>中推荐保留的hosts记录，因为几乎全都不需要而且可能带来访问某些服务的障碍</strong>。放弃上次的思路，这次我们从完全不用hosts文件出发，发现不同于PC上，<strong>手机的网络上大部分google服务是可以正常使用的，不需要修改hosts</strong>。只有少数的服务不能用/不太好用，所以我们从0开始，一条条添加hosts记录而不是删除没用的，下面我们就来一条条列举：</p>
<p>　　1、google listen<br />
　　是的，你没有看错，如此小众的服务才会需要hosts的帮助，因为这个不受google待见的小app使用了appspot——后果你懂的。我们需要在hosts中加入如下一句：</p>

<div class="wp_syntax"><div class="code"><pre class="whois" style="font-family:monospace;"><span style="color: #804040;">203.208.46.148</span> lfe-alpo-gm.appspot.com</pre></div></div>

<p>　　2、music beta by google<br />
　　稍微大众一些的服务了，这个还是比较有价值的。它在国内的网络上的问题很有趣：使用了常用的hosts文件就会不能同步音乐列表，但是去掉hosts文件就会无法播放。为此，你需要确定你的hosts文件中没有这个网址googleapis.l.google.com和这个网址www.googleapis.com，这两个中的某一个（今天白天我实验出来的，现在忘了……）只要设置成google.cn系列的IP，就会导致它不能同步。为了播放音乐，你需要添加以下内容</p>

<div class="wp_syntax"><div class="code"><pre class="whois" style="font-family:monospace;"><span style="color: #804040;">203.208.46.148</span> music.google.com
<span style="color: #804040;">203.208.46.148</span> t.doc-0-0-sj.sj.googleusercontent.com
<span style="color: #804040;">203.208.46.148</span> music-streaming.l.google.com
<span style="color: #804040;">203.208.46.148</span> music.googleusercontent.com
<span style="color: #804040;">203.208.46.148</span> uploadsj.clients.google.com
<span style="color: #804040;">203.208.46.148</span> large-uploads.l.google.com</pre></div></div>

<p>　　3、google docs<br />
　　这个是重头戏，倒不是因为docs有多么重要，关键是因为这玩意太需要天时地利人和了。<br />
　　首先，你不能有这条记录apis.google.com，不管你设置的是什么IP，只要有这个域名就不行。<br />
　　其次，你必须有这条记录</p>

<div class="wp_syntax"><div class="code"><pre class="whois" style="font-family:monospace;"><span style="color: #804040;">209.85.225.101</span> docs.google.com</pre></div></div>

<p>　　注意，既不是google.cn系的IP，也不是你用just-ping得到的香港IP——中文地区用的IP似乎都被过滤了google docs，只有这个欧美用的（根据just-ping的结果）IP似乎勉强能用，但还是断断续续、时好时坏、长文件也很难完整载入<br />
　　最后，你最好去掉所有的google.com/www.google.com/www.l.google.com等与web访问相关的记录，docs在打开文件的时候有一个复杂的跳转过程，其中似乎会访问到google.com系列的域名，（不是十分确定的）只要你在这些域名上使用了google.cn系IP就会出错。<br />
<span id="more-463"></span><br />
　　4、其他<br />
　　也许你需要在手机上通过浏览器访问一些google服务，那么也许你可以加上这些：</p>

<div class="wp_syntax"><div class="code"><pre class="whois" style="font-family:monospace;"><span style="color: #804040;">203.208.46.148</span> feedburner.google.com
<span style="color: #804040;">203.208.46.148</span> www.feedburner.com
<span style="color: #804040;">203.208.46.148</span> feeds.feedburner.com
<span style="color: #804040;">203.208.46.148</span> feeds2.feedburner.com
<span style="color: #804040;">203.208.46.148</span> feedproxy.google.com
<span style="color: #804040;">203.208.46.148</span> goo.gl
<span style="color: #804040;">203.208.46.148</span> g.co
<span style="color: #804040;">203.208.46.148</span> groups.google.com
<span style="color: #804040;">203.208.46.148</span> groups.google.cn
<span style="color: #804040;">203.208.46.148</span> groups.google.com.hk
<span style="color: #804040;">203.208.46.148</span> groups-beta.google.com
<span style="color: #804040;">203.208.46.148</span> groups.l.google.com
<span style="color: #804040;">203.208.46.148</span> blob-s-docs.googlegroups.com</pre></div></div>

<p>　　以及其他你想访问的东西，比如google code等。<br />
　　如果你像我一样使用pulse，那么你可以加上</p>

<div class="wp_syntax"><div class="code"><pre class="whois" style="font-family:monospace;"><span style="color: #804040;">203.208.46.148</span> hr-pulsesubscriber.appspot.com</pre></div></div>

<p>　　如果你要用twitter的官方客户端（建议别用，原因看<a href="http://blog.williamgates.biz/2011/10/twitter-app-causes-android-process-acore-error/">这里</a>），加上这个就行</p>

<div class="wp_syntax"><div class="code"><pre class="whois" style="font-family:monospace;"><span style="color: #804040;">199.59.149.243</span> oauth.twitter.com
<span style="color: #804040;">199.59.149.243</span> twitter.com
<span style="color: #804040;">199.59.149.243</span> www.twitter.com
<span style="color: #804040;">199.59.149.243</span> mobile.twitter.com
<span style="color: #804040;">199.59.149.243</span> api.twitter.com
<span style="color: #804040;">199.59.148.201</span> search.twitter.com
<span style="color: #804040;">199.59.148.139</span> userstream.twitter.com
<span style="color: #804040;">199.59.149.243</span> ssl.twitter.com
<span style="color: #804040;">199.59.149.243</span> status.twitter.com
<span style="color: #804040;">199.59.149.243</span> assets0.twitter.com
<span style="color: #804040;">199.59.149.243</span> assets1.twitter.com
<span style="color: #804040;">199.59.149.243</span> assets2.twitter.com
<span style="color: #804040;">199.59.149.243</span> assets3.twitter.com
<span style="color: #804040;">199.59.149.243</span> static.twitter.com
<span style="color: #804040;">184.29.36.124</span> platform.twitter.com
<span style="color: #804040;">219.76.10.138</span> platform0.twitter.com
<span style="color: #804040;">199.59.148.206</span> help.twitter.com
<span style="color: #804040;">199.59.148.206</span> support.twitter.com
<span style="color: #804040;">209.84.4.102</span> si0.twimg.com
<span style="color: #804040;">209.84.4.102</span> si1.twimg.com
<span style="color: #804040;">209.84.4.102</span> si2.twimg.com
<span style="color: #804040;">209.84.4.102</span> si3.twimg.com
<span style="color: #804040;">209.84.4.102</span> si4.twimg.com
<span style="color: #804040;">209.84.4.102</span> si5.twimg.com
<span style="color: #804040;">199.59.149.243</span> upload.twitter.com
<span style="color: #804040;">199.59.149.210</span> t.co</pre></div></div>

<p>　　是的，相信我，你不再需要其他的了。除了youtube我们真的无能为力以外，talk/mail/maps/goggles/market/reader/google+等几乎所有通过apps可以访问的服务，都是正常的，不需要你画蛇添足。<br />
　　<strong>国内手机网络上解析到的google在香港的IP速度往往不亚于google.cn系，而且通过一些复杂的跳转还会自动使用cn系的某些服务器（market下载的时候似乎会），而乱改hosts只会让你上网更慢，甚至无法访问一些服务。</strong>比如很多人在手机上像PC上一样定期更新hosts列表，然后再寻找修改版的google maps来用（见<a href="https://plus.google.com/109906764666611489817/posts/Z854TLWuTPV">这里</a>，这是一个典型的画蛇添足、却由于换行符错误导致hosts文件不起作用，误打误撞成功访问了一些服务，却自以为是hosts起作用的“中医式”笑话）殊不知官方版的maps在没有hosts记录的情况下工作得非常好。<br />
　　需要提醒的是，大家一定要注意android上hosts文件的换行符必须是\n而不是windows的\r\n，你可以用notepad++打开hosts文件，点菜单中的view-show symbol-show all characters，看到行末是LF就正确，CR LF就错误。如果是后者，你需要替换所有的CR LF为LF（用它的replace中的扩展模式）。<br />
　　结论已经写在上面了，不要自作聪明乱改android的hosts文件，一方面android的app机制不同于PC系统中的程序，很多网络访问并不是通过在程序中写域名来实现的，google.cn系的服务器并不适合手机apps的使用；另一方面手机网络比主干的线路似乎少了很多DNS污染，所以没有必要修改hosts记录。如果你真的需要解决某个服务不能访问的问题，那么对症下药就好，千万不要使用长长的hosts列表。</p>
<p>Related posts:<ol>
<li><a href='http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/' rel='bookmark' title='慎改Android的Hosts文件'>慎改Android的Hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/how-to-purchase-android-apps-use-i809-at-mainland-china/' rel='bookmark' title='在国行双网机（如i909/i809）上使用Android Market购买app研究小结'>在国行双网机（如i909/i809）上使用Android Market购买app研究小结</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/twitter-app-causes-android-process-acore-error/' rel='bookmark' title='twitter官方客户端导致android联系人功能不能访问'>twitter官方客户端导致android联系人功能不能访问</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2011/11/do-not-and-do-not-edit-hosts-of-android/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>在国行双网机（如i909/i809）上使用Android Market购买app研究小结</title>
		<link>http://blog.williamgates.biz/2011/10/how-to-purchase-android-apps-use-i809-at-mainland-china/</link>
		<comments>http://blog.williamgates.biz/2011/10/how-to-purchase-android-apps-use-i809-at-mainland-china/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 03:22:36 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[技术心得]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[折腾]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/?p=457</guid>
		<description><![CDATA[　　这个研究不仅对国行双网手机有效，对其他手机用户也有很大的参考价值，因为网上的教程基本全都是错的或者有严重错误存在的。要在中国大陆、使用国行双网手机购买android app，需要解决三个问题： 　　1、让Android Market显示收费程序 　　众所周知，i909/i809等双网手机使用Market Enabler或其他类似程序是没有效果的。参考这里，说明需要修改系统参数（其实Market Enabler的原理就是这个，完全可以手动完成），但是我修改了之后没有效果，为此参考这里，原来双网机与其他机器不同，需要改两个参数，而且有一个是ruim而不是sim。 　　两个技巧结合起来，请执行这两条命令（其他的都是多余的）： setprop gsm.ruim.operator.numeric &#34;310004&#34; setprop gsm.sim.operator.numeric &#34;310260&#34; 　　但这里需要注意的是，必须打开飞行模式或者拔掉所有手机卡再执行这两个命令，而此时上面这两个参数就是空白（你可以使用getprop命令查看），因此你也可以不修改这两个值，而使用美国VPN，效果是一样的。另外我用手机上的终端模拟器执行这两个命令似乎有些问题，建议使用SSHDroid或类似程序在手机上打开SSH访问再从电脑用putty访问，并执行命令。 　　然后你需要停止vending程序（即android market）的运行并清除缓存，使用下面两个命令 busybox killall com.android.vending busybox rm -rf /data/data/com.android.vending/cache 　　或者你也可以在设置-程序中将电子市场停止运行并清除数据。 　　简单来说，你应当（1）开启飞行模式，打开wifi并连接上可用的无线网络；（2）执行上面的两个setprop命令或者连接一个可靠的美国VPN；（3）运行上面的命令或者在设置菜单中停止电子市场的运行并清除它的数据。经过这三步，你就能看到电子市场中所有的收费和不对大陆开放的免费软件了，并且你可以下载任何免费软件、升级你已经购买的收费软件和已经下载的免费软件。但此时你还不能购买新软件，需要下面两步： 　　2、设置Google Checkout 　　网上的教程一般都类似于这里，其实存在一些问题，我简单整理了流程如下： 　　（1）在电脑上（不要用手机登陆）使用你拥有的国际信用卡注册（必须注册在你在android手机上使用的google帐户名下），填写真实的信用卡信息，用英文填写姓名，姓和名中间隔一个空格。请注意checkout的帮助里写着在美国以外的地区不接受运通，我不知道我们这种方式算不算美国以外地区，反正我用招行运通卡没有成功，但没有成功的原因也许是第三步的问题，后文详述。总之我使用中行的MasterCard成功了。 　　（2）Billing Address填写任意可以使用checkout的国家/地区的合法地址，建议使用国际知名的酒店，我用的是旧金山的喜来登，这些酒店的地址、邮编、电话可以很方便地从网上查到。必须使用一致的地址、邮编、电话，并且该地址最好能从google maps上查找到。另外不同的国家/地区会影响你支付时的货币兑换，我先前填写了香港地址就会从卡上扣港币，而且货币是根据软件制作者的checkout地址换算的，比如我用美国地址购买cut the rope就是确定的价格，购买钛备份就提示“约5.88美元”，但实际购买的时候是6.58美元。因此哪个国家/地区的地址更便宜，可能值得研究。 　　（3）不要填写收货地址，按默认使用Billing Address就可以了，有人说填写中国地址可能有助于中国银行的审核，但我觉得银行才懒得审核你一两美元的国际消费，不必担心。 　　简单来说，（1）填写一个真实的美国/香港地址，包括地址、电话、邮编，姓名用你自己的；（2）填写你自己的真实信用卡信息，这样你就可以使用checkout了（不仅在android market）。 　　3、使用旧版电子市场 　　很多教程进行到上面两步就结束了，可能是因为中国人很少购买app，大家只是为了看到收费软件并且能够更新一些地区限制的免费软件就满足了。事实上，进行了上面的步骤以后，使用新版本的电子市场是无法购买的！3.1.5会提示“系统无法找到你需要购买的商品”，3.2.0直接就报出现错误，让你更摸不着头脑。幸好看到了这里，我尝试使用旧版电子市场，居然成功了！ 　　使用旧版电子市场并不容易，简单地从system/apps里删除新版vending.apk并拷入旧版是没用的，会自动更新成新版，而用钛备份冻结更新程序之后好像还是会出错（研究过程中比较混乱，没有记录全部的问题），我找到一个最简便也最彻底的方法，请看这里，使用这个叫做OldMarket的程序，选择旧版市场后重启，你就能一直用着旧版市场了。而且还有一个好处，不使用上面的步骤，旧版市场也能更新一些地区限制的免费程序，这个未经严格对比测试，只是使用过程中的发现。 　　简单来说，装个oldmarket并且选择oldmarket，它会自动帮你安装一个2.3.6版本的电子市场并且不会被更新，你就可以畅买各种apps了。 　　提示：花钱须谨慎…… Related posts: 再谈不要乱改Android的hosts文件 慎改Android的Hosts文件 twitter官方客户端导致android联系人功能不能访问]]></description>
			<content:encoded><![CDATA[<p>　　这个研究不仅对国行双网手机有效，对其他手机用户也有很大的参考价值，因为<strong>网上的教程基本全都是错的或者有严重错误存在的</strong>。要在中国大陆、使用国行双网手机购买android app，需要解决三个问题：</p>
<p>　　1、让Android Market显示收费程序<br />
　　众所周知，i909/i809等双网手机使用Market Enabler或其他类似程序是没有效果的。参考<a href="http://zhujianjia.iteye.com/blog/1051768">这里</a>，说明需要修改系统参数（其实Market Enabler的原理就是这个，完全可以手动完成），但是我修改了之后没有效果，为此参考<a href="http://www.in189.com/thread-273605-1-1.html">这里</a>，原来双网机与其他机器不同，需要改两个参数，而且有一个是ruim而不是sim。<br />
　　两个技巧结合起来，请执行这两条命令（其他的都是多余的）：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">setprop gsm.ruim.operator.numeric <span style="color: #ff0000;">&quot;310004&quot;</span>
setprop gsm.sim.operator.numeric <span style="color: #ff0000;">&quot;310260&quot;</span></pre></div></div>

<p>　　但这里需要注意的是，必须打开飞行模式或者拔掉所有手机卡再执行这两个命令，而此时上面这两个参数就是空白（你可以使用getprop命令查看），因此你也可以不修改这两个值，而使用美国VPN，效果是一样的。另外我用手机上的终端模拟器执行这两个命令似乎有些问题，建议使用SSHDroid或类似程序在手机上打开SSH访问再从电脑用putty访问，并执行命令。<br />
　　然后你需要停止vending程序（即android market）的运行并清除缓存，使用下面两个命令</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">busybox <span style="color: #c20cb9; font-weight: bold;">killall</span> com.android.vending
busybox <span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>data<span style="color: #000000; font-weight: bold;">/</span>com.android.vending<span style="color: #000000; font-weight: bold;">/</span>cache</pre></div></div>

<p>　　或者你也可以在设置-程序中将电子市场停止运行并清除数据。<br />
　　简单来说，你应当<strong>（1）开启飞行模式，打开wifi并连接上可用的无线网络；（2）执行上面的两个setprop命令或者连接一个可靠的美国VPN；（3）运行上面的命令或者在设置菜单中停止电子市场的运行并清除它的数据。</strong>经过这三步，你就能看到电子市场中所有的收费和不对大陆开放的免费软件了，并且你可以下载任何免费软件、升级你已经购买的收费软件和已经下载的免费软件。但此时你还不能购买新软件，需要下面两步：<br />
<span id="more-457"></span><br />
　　2、设置Google Checkout<br />
　　网上的教程一般都类似于<a href="http://android.sj.91.com/content/2009-06-17/20090617015332380.shtml">这里</a>，其实存在一些问题，我简单整理了流程如下：<br />
　　（1）在电脑上（不要用手机登陆）使用你拥有的国际信用卡注册（必须注册在你在android手机上使用的google帐户名下），填写真实的信用卡信息，用英文填写姓名，姓和名中间隔一个空格。请注意checkout的帮助里写着在美国以外的地区不接受运通，我不知道我们这种方式算不算美国以外地区，反正我用招行运通卡没有成功，但没有成功的原因也许是第三步的问题，后文详述。总之我使用中行的MasterCard成功了。<br />
　　（2）Billing Address填写任意可以使用checkout的国家/地区的合法地址，建议使用国际知名的酒店，我用的是旧金山的喜来登，这些酒店的地址、邮编、电话可以很方便地从网上查到。必须使用一致的地址、邮编、电话，并且该地址最好能从google maps上查找到。另外不同的国家/地区会影响你支付时的货币兑换，我先前填写了香港地址就会从卡上扣港币，而且货币是根据软件制作者的checkout地址换算的，比如我用美国地址购买cut the rope就是确定的价格，购买钛备份就提示“约5.88美元”，但实际购买的时候是6.58美元。因此哪个国家/地区的地址更便宜，可能值得研究。<br />
　　（3）不要填写收货地址，按默认使用Billing Address就可以了，有人说填写中国地址可能有助于中国银行的审核，但我觉得银行才懒得审核你一两美元的国际消费，不必担心。<br />
　　简单来说，<strong>（1）填写一个真实的美国/香港地址，包括地址、电话、邮编，姓名用你自己的；（2）填写你自己的真实信用卡信息，这样你就可以使用checkout了（不仅在android market）</strong>。</p>
<p>　　3、使用旧版电子市场<br />
　　很多教程进行到上面两步就结束了，可能是因为中国人很少购买app，大家只是为了看到收费软件并且能够更新一些地区限制的免费软件就满足了。事实上，进行了上面的步骤以后，使用新版本的电子市场是无法购买的！3.1.5会提示“系统无法找到你需要购买的商品”，3.2.0直接就报出现错误，让你更摸不着头脑。幸好看到了<a href="http://bbs.et8.net/live/showthread.php?t=1039463">这里</a>，我尝试使用旧版电子市场，居然成功了！<br />
　　使用旧版电子市场并不容易，简单地从system/apps里删除新版vending.apk并拷入旧版是没用的，会自动更新成新版，而用钛备份冻结更新程序之后好像还是会出错（研究过程中比较混乱，没有记录全部的问题），我找到一个最简便也最彻底的方法，请看<a href="http://forum.xda-developers.com/showthread.php?t=1240344">这里</a>，使用这个叫做OldMarket的程序，选择旧版市场后重启，你就能一直用着旧版市场了。而且还有一个好处，不使用上面的步骤，旧版市场也能更新一些地区限制的免费程序，这个未经严格对比测试，只是使用过程中的发现。<br />
　　简单来说，<strong>装个oldmarket并且选择oldmarket</strong>，它会自动帮你安装一个2.3.6版本的电子市场并且不会被更新，你就可以畅买各种apps了。</p>
<p>　　提示：花钱须谨慎……</p>
<p>Related posts:<ol>
<li><a href='http://blog.williamgates.biz/2011/11/do-not-and-do-not-edit-hosts-of-android/' rel='bookmark' title='再谈不要乱改Android的hosts文件'>再谈不要乱改Android的hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/' rel='bookmark' title='慎改Android的Hosts文件'>慎改Android的Hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/twitter-app-causes-android-process-acore-error/' rel='bookmark' title='twitter官方客户端导致android联系人功能不能访问'>twitter官方客户端导致android联系人功能不能访问</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2011/10/how-to-purchase-android-apps-use-i809-at-mainland-china/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>慎改Android的Hosts文件</title>
		<link>http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/</link>
		<comments>http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 06:34:38 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[技术心得]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[折腾]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/?p=441</guid>
		<description><![CDATA[　　最近刚开始接触Android,是三星的i809，行货，双网双待，如你所想的——没有GMS。 　　拿到手第一步就是root,然后装上GMS，然后发现市场不能用，遂开始改host。当时没有注意Linux下Hosts文件的换行要求，添加的大部分内容都没有实际产生作用，但误打误撞就是能用了，google的各项服务都正常。 　　这两天突发奇想（我所有技术文章里提到这个词就意味着接下来是无穷无尽的折腾）把网上广为流传、常年更新的那个《Google和各种网站的 IPv4 服务hosts》放到手机里，并且用notepad++替换了所有的换行符（确定行末是LF而不是CR LF），谁知产生了如下问题： 　　1、Latitude无法访问网络 　　可以获得定位，但无法访问网络下载好友的位置并上传自己的位置。 　　解决方法：注释掉Maps那一整节，可以保留Satellite View和Street View的部分，也可以不保留（后面会讲原因） 　　2、Google+客户端无法登陆 　　体现为Google+不断显示连接断开。 　　解决方法：注释掉第一段即##Google.com段，可以保留google.com和services.google.com。 　　3、Google+客户端无法显示图片 　　仅在电信3G下有此现象，电信有线宽带通过家用路由产生的WIFI无问题。 　　解决方案：请按照这篇文章作相应修改，但无须改掉第一条，即picadaweb.google.com可以保留为203.208.46.144或其他google.cn的IP 　　4、SMS Backup+无法连接Gmail 　　SMS Backup+是一个可以把短信、通话记录甚至彩信备份到Gmail和Calendar的软件，最牛逼的是他还能恢复……可惜用了上述Hosts文件后无法使用（未测试无Hosts文件的情况）。 　　解决方案：注释掉imap.gmail.com、imap.google.com、imap.googlemail.com、gmail-imap.l.google.com的Host记录，因为这软件是直连imap.gmail.com的993端口的，google.cn的IP群好像不提供这功能。 　　5、GTasks无法同步 　　一个非官方的与Gmail的Tasks同步的软件，它也无法连接。 　　解决方案：注释掉mail.google.com的Host记录，估计它也是直连该域名的某端口。 　　由于我的PC上使用的是Acrylic DNS Proxy来作为本地DNS服务，它支持通配符，我是暴力地将所有google域名都设置为203.208.46.148的，在PC上很正常，但是到了手机上就有很多服务不能访问，因为手机apps不一定是通过类似浏览器的途径来访问google服务的，对于浏览器有效的google.cn转发未必适用于手机软件。 　　另一方面，经过研究发现，手机上网（仅测试了电信3G，但根据网上资料，其他运营商似乎也如此）不存在严重的DNS污染和断流现象，对于没有直接封禁的google服务，不妨通过手机自己的解析或者正确的IP（比如上面Google+的图片服务器）来访问，而不需要在hosts文件中用google.cn的IP群来做转发。在我的手机上实测，ping 74.125.71段（官方IP，大陆和香港的正确解析结果）甚至比203.208.46段（google.cn的IP)还要快。 　　也就是说，对于彻底不能上的服务才需要修改Host，不要在Android系统中添加像PC上那样大而全的Host文件。 　　明确有必要的Hosts修改大致有： 203.208.46.148 profiles.google.com #用以上google+，未详细测试，可能也不需要 203.208.46.148 market.android.com　#用以上官方菜市场 &#160; #Twitter，可用官方客户端 199.59.149.243 oauth.twitter.com 199.59.149.243 twitter.com 199.59.149.243 www.twitter.com 199.59.149.243 mobile.twitter.com 199.59.149.243 api.twitter.com 199.59.148.201 search.twitter.com 199.59.148.139 userstream.twitter.com 199.59.149.243 ssl.twitter.com [...]]]></description>
			<content:encoded><![CDATA[<p>　　最近刚开始接触Android,是三星的i809，行货，双网双待，如你所想的——没有GMS。<br />
　　拿到手第一步就是root,然后装上GMS，然后发现市场不能用，遂开始改host。当时没有注意Linux下Hosts文件的换行要求，添加的大部分内容都没有实际产生作用，但误打误撞就是能用了，google的各项服务都正常。<br />
　　这两天突发奇想（我所有技术文章里提到这个词就意味着接下来是无穷无尽的折腾）把网上广为流传、常年更新的那个《<a href="https://docs.google.com/document/d/1GWaVSxitymPsfUOXwl1BOD7rHR_RiolDoR13r1ydSMc/edit?hl=en_US" target="_blank">Google和各种网站的 IPv4 服务hosts</a>》放到手机里，并且用<a href="http://notepad-plus-plus.org/" target="_blank">notepad++</a>替换了所有的换行符（确定行末是LF而不是CR LF），谁知产生了如下问题：</p>
<p>　　1、Latitude无法访问网络<br />
　　可以获得定位，但无法访问网络下载好友的位置并上传自己的位置。<br />
　　解决方法：注释掉Maps那一整节，可以保留Satellite View和Street View的部分，也可以不保留（后面会讲原因）</p>
<p>　　2、Google+客户端无法登陆<br />
　　体现为Google+不断显示连接断开。<br />
　　解决方法：注释掉第一段即##Google.com段，可以保留google.com和services.google.com。</p>
<p>　　3、Google+客户端无法显示图片<br />
　　仅在电信3G下有此现象，电信有线宽带通过家用路由产生的WIFI无问题。<br />
　　解决方案：请按照<a href="https://plus.google.com/109673324161622147537/posts/8ep1zqifmMa" target="_blank">这篇文章</a>作相应修改，但无须改掉第一条，即picadaweb.google.com可以保留为203.208.46.144或其他google.cn的IP</p>
<p>　　4、SMS Backup+无法连接Gmail<br />
　　SMS Backup+是一个可以把短信、通话记录甚至彩信备份到Gmail和Calendar的软件，最牛逼的是他还能恢复……可惜用了上述Hosts文件后无法使用（未测试无Hosts文件的情况）。<br />
　　解决方案：注释掉imap.gmail.com、imap.google.com、imap.googlemail.com、gmail-imap.l.google.com的Host记录，因为这软件是直连imap.gmail.com的993端口的，google.cn的IP群好像不提供这功能。</p>
<p>　　5、GTasks无法同步<br />
　　一个非官方的与Gmail的Tasks同步的软件，它也无法连接。<br />
　　解决方案：注释掉mail.google.com的Host记录，估计它也是直连该域名的某端口。<br />
<span id="more-441"></span><br />
　　由于我的PC上使用的是<a href="http://mayakron.altervista.org/support/browse.php?path=Acrylic" target="_blank">Acrylic DNS Proxy</a>来作为本地DNS服务，它支持通配符，我是暴力地将所有google域名都设置为203.208.46.148的，在PC上很正常，但是到了手机上就有很多服务不能访问，因为手机apps不一定是通过类似浏览器的途径来访问google服务的，对于浏览器有效的google.cn转发未必适用于手机软件。<br />
　　另一方面，经过研究发现，手机上网（仅测试了电信3G，但根据网上资料，其他运营商似乎也如此）不存在严重的DNS污染和断流现象，对于没有直接封禁的google服务，不妨通过手机自己的解析或者正确的IP（比如上面Google+的图片服务器）来访问，而不需要在hosts文件中用google.cn的IP群来做转发。在我的手机上实测，ping 74.125.71段（官方IP，大陆和香港的正确解析结果）甚至比203.208.46段（google.cn的IP)还要快。<br />
　　也就是说，对于彻底不能上的服务才需要修改Host，不要在Android系统中添加像PC上那样大而全的Host文件。<br />
　　明确有必要的Hosts修改大致有：</p>

<div class="wp_syntax"><div class="code"><pre class="whois" style="font-family:monospace;"><span style="color: #804040;">203.208.46.148</span> profiles.google.com #用以上google+，未详细测试，可能也不需要
<span style="color: #804040;">203.208.46.148</span> market.android.com　#用以上官方菜市场
&nbsp;
#Twitter，可用官方客户端
<span style="color: #804040;">199.59.149.243</span> oauth.twitter.com
<span style="color: #804040;">199.59.149.243</span> twitter.com
<span style="color: #804040;">199.59.149.243</span> www.twitter.com
<span style="color: #804040;">199.59.149.243</span> mobile.twitter.com
<span style="color: #804040;">199.59.149.243</span> api.twitter.com
<span style="color: #804040;">199.59.148.201</span> search.twitter.com
<span style="color: #804040;">199.59.148.139</span> userstream.twitter.com
<span style="color: #804040;">199.59.149.243</span> ssl.twitter.com
<span style="color: #804040;">199.59.149.243</span> status.twitter.com
<span style="color: #804040;">199.59.149.243</span> assets0.twitter.com
<span style="color: #804040;">199.59.149.243</span> assets1.twitter.com
<span style="color: #804040;">199.59.149.243</span> assets2.twitter.com
<span style="color: #804040;">199.59.149.243</span> assets3.twitter.com
<span style="color: #804040;">199.59.149.243</span> static.twitter.com
<span style="color: #804040;">184.29.36.124</span> platform.twitter.com
<span style="color: #804040;">219.76.10.138</span> platform0.twitter.com
<span style="color: #804040;">199.59.148.206</span> help.twitter.com
<span style="color: #804040;">199.59.148.206</span> support.twitter.com
<span style="color: #804040;">209.84.4.102</span> si0.twimg.com
<span style="color: #804040;">209.84.4.102</span> si1.twimg.com
<span style="color: #804040;">209.84.4.102</span> si2.twimg.com
<span style="color: #804040;">209.84.4.102</span> si3.twimg.com
<span style="color: #804040;">209.84.4.102</span> si4.twimg.com
<span style="color: #804040;">209.84.4.102</span> si5.twimg.com
<span style="color: #804040;">199.59.149.243</span> upload.twitter.com
<span style="color: #804040;">199.59.149.210</span> t.co</pre></div></div>

<p>　　广为流传的修改android.clients.google.com、android.l.google.com、clients2.google.com这三个域名，经测试都是不必要的，没有任何影响。而不管怎么改gmail和gtalk的host，他们的客户端都能正常上。本文提到的Hosts文件里面的有些注释是不对的，比如修改了某一条会影响Gtalk等，是针对IPv6环境下的PC上的Gtalk而言，要追根溯源看问题的原因就明白了。<br />
　　最后的遗留问题是，不管怎么修改都无法解决Google Docs没法上的问题，PC上改一下host就能解决的问题，Android的客户端死活不认，不知谁能指导一下……</p>
<p>Related posts:<ol>
<li><a href='http://blog.williamgates.biz/2011/11/do-not-and-do-not-edit-hosts-of-android/' rel='bookmark' title='再谈不要乱改Android的hosts文件'>再谈不要乱改Android的hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/twitter-app-causes-android-process-acore-error/' rel='bookmark' title='twitter官方客户端导致android联系人功能不能访问'>twitter官方客户端导致android联系人功能不能访问</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/how-to-purchase-android-apps-use-i809-at-mainland-china/' rel='bookmark' title='在国行双网机（如i909/i809）上使用Android Market购买app研究小结'>在国行双网机（如i909/i809）上使用Android Market购买app研究小结</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Directory Opus 联网验证被封证书后，清除安装痕迹的方法</title>
		<link>http://blog.williamgates.biz/2009/06/how-to-uninstall-directory-opus-completely/</link>
		<comments>http://blog.williamgates.biz/2009/06/how-to-uninstall-directory-opus-completely/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 07:51:22 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[技术心得]]></category>
		<category><![CDATA[Directory Opus]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[折腾]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/?p=343</guid>
		<description><![CDATA[　　Directory Opus 是一个非常优秀的文件管理器，可以替代windows的Explorer，作为系统的默认资源管理器。 　　DO作为一个功能和反破解都下了功夫的精品软件，一直以来没有很好的破解手段，主要破解方法都是通过real key安装证书，并通过crack一个文件来防止联网验证证书。但是v9.1.1.8 Build 3352没有适合的crack，只有real key，所以要小心地防止它自动升级（其实也包括了联网验证），一般使用的方法是防火墙阻挡，我没有网络防火墙，一般就是在它的选项里禁止自动升级而已。 　　重装系统之后装上DO，把自动更新关掉，但事实证明仅仅关掉一次是不行的，我不小心中招了——DO自动更新，并且宣告我的证书为非法。卸掉重装，效果依然，这个real key已经不被DO接受了。 　　怎么办呢？难道再重装一次系统？仔细想来，肯定是DO卸载的时候留下了一些痕迹，标识了已知的证书黑名单。但是这些痕迹在哪里呢？ 　　经过一些错误的尝试（中文网页往往只收录了我下面要说的方法的一小部分，而且是没用的那一部分，很有误导效果），终于找到了合适的方法，转载并翻译如下： 第一步，准备工作： 用防火墙或者Host文件（%systemroot%\system32\drivers\etc\hosts）阻挡以下地址: 127.0.0.1 gpsoftware.com.au 127.0.0.1 www.gpsoftware.com.au 重启 测试一下，ping以上地址是否都是127.0.0.1 第二步，卸载DO（如果你已经卸载过就不用了） 第三步，查找并删除注册表中所有含有 &#8220;gpsoftware&#8221; 和 &#8220;dopus&#8221; 的键值和主键 第四步，清除注册表中的黑名单 删除下列主键项下的所有子键，不删除主键本身 HKEY_CURRENT_USER\Control Panel\International\Time HKEY_CURRENT_USER\Software\Microsoft\Clock HKEY_CURRENT_USER\Software\Microsoft\File Manager\Settings HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\TrashInfo\ HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\DlgInfo\ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Management\AppDataBucket\ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DesktopInterfaceMethod\ 测试，在注册表中搜索{CBE4B0D2-C4FC-45E3-976C-7D2E951DD34B}，如果已经没有结果，那么注册表清除完毕 第五步，清除文件黑名单 删除 C:\windows\system32\inf32 目录下的所有文件，但保留该目录 删除以下文件 %programfiles%\GPSoftware\Directory Opus\dopus.dat %appdata%\GPSoftware\Directory Opus\dopus.dat %windir%\xpcc37.log %windir%\system32\argtmp39.dll %Systemroot%\Documents and Settings\All Users\Application Data\GPSoftware\Directory [...]]]></description>
			<content:encoded><![CDATA[<p>　　<a href="http://www.gpsoft.com.au/">Directory Opus</a> 是一个非常优秀的文件管理器，可以替代windows的Explorer，作为系统的默认资源管理器。<br />
　　DO作为一个功能和反破解都下了功夫的精品软件，一直以来没有很好的破解手段，主要破解方法都是通过real key安装证书，并通过crack一个文件来防止联网验证证书。但是v9.1.1.8 Build 3352没有适合的crack，只有real key，所以要小心地防止它自动升级（其实也包括了联网验证），一般使用的方法是防火墙阻挡，我没有网络防火墙，一般就是在它的选项里禁止自动升级而已。<br />
　　重装系统之后装上DO，把自动更新关掉，但事实证明仅仅关掉一次是不行的，我不小心中招了——DO自动更新，并且宣告我的证书为非法。卸掉重装，效果依然，这个real key已经不被DO接受了。<br />
　　怎么办呢？难道再重装一次系统？仔细想来，肯定是DO卸载的时候留下了一些痕迹，标识了已知的证书黑名单。但是这些痕迹在哪里呢？<br />
　　经过一些错误的尝试（中文网页往往只收录了我下面要说的方法的一小部分，而且是没用的那一部分，很有误导效果），终于找到了合适的方法，转载并翻译如下：<br />
<span id="more-343"></span></p>
<blockquote><p>第一步，准备工作：</p>
<ul>
<li>用防火墙或者Host文件（%systemroot%\system32\drivers\etc\hosts）阻挡以下地址:

<div class="wp_syntax"><div class="code"><pre class="whois" style="font-family:monospace;"><span style="color: #804040;">127.0.0.1</span> gpsoftware.com.au
<span style="color: #804040;">127.0.0.1</span> www.gpsoftware.com.au</pre></div></div>

</li>
<li>重启</li>
<li>测试一下，ping以上地址是否都是127.0.0.1</li>
</ul>
<p>第二步，卸载DO（如果你已经卸载过就不用了）</p>
<p>第三步，查找并删除注册表中所有含有 &#8220;gpsoftware&#8221; 和  &#8220;dopus&#8221; 的键值和主键</p>
<p>第四步，清除注册表中的黑名单</p>
<ul>
<li>删除下列主键项下的所有子键，不删除主键本身

<div class="wp_syntax"><div class="code"><pre class="reg" style="font-family:monospace;"><span style="color: #800000;">HKEY_CURRENT_USER</span>\Control Panel\International\Time
<span style="color: #800000;">HKEY_CURRENT_USER</span>\Software\Microsoft\Clock
<span style="color: #800000;">HKEY_CURRENT_USER</span>\Software\Microsoft\File Manager\Settings
<span style="color: #800000;">HKEY_CURRENT_USER</span>\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\TrashInfo\
<span style="color: #800000;">HKEY_CURRENT_USER</span>\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\DlgInfo\
<span style="color: #800000;">HKEY_LOCAL_MACHINE</span>\Software\Microsoft\Windows\CurrentVersion\App Management\AppDataBucket\
<span style="color: #800000;">HKEY_LOCAL_MACHINE</span>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DesktopInterfaceMethod\</pre></div></div>

</li>
<li>测试，在注册表中搜索{CBE4B0D2-C4FC-45E3-976C-7D2E951DD34B}，如果已经没有结果，那么注册表清除完毕</li>
</ul>
<p>第五步，清除文件黑名单</p>
<ul>
<li>删除 C:\windows\system32\inf32 目录下的所有文件，但保留该目录</li>
<li>删除以下文件

<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #33cc33;">%</span><span style="color: #448888;">programfiles</span><span style="color: #33cc33;">%</span>\GPSoftware\Directory Opus\dopus.dat
<span style="color: #33cc33;">%</span><span style="color: #448888;">appdata</span><span style="color: #33cc33;">%</span>\GPSoftware\Directory Opus\dopus.dat
<span style="color: #33cc33;">%</span><span style="color: #448888;">windir</span><span style="color: #33cc33;">%</span>\xpcc37.log
<span style="color: #33cc33;">%</span><span style="color: #448888;">windir</span><span style="color: #33cc33;">%</span>\system32\argtmp39.dll
<span style="color: #33cc33;">%</span><span style="color: #448888;">Systemroot</span><span style="color: #33cc33;">%</span>\Documents and Settings\All Users\Application Data\GPSoftware\Directory Opus\dopus.cert</pre></div></div>

</li>
</ul>
</blockquote>
<p>这样就清理完成了，断网后再次安装DO，证书就会被接受了。</p>
<p>说明：</p>
<blockquote><ul>
<li>关于第一步，有说法是现在DO在代码里已经写死了IP地址，不再需要解析，所以第一步本身并不保险，建议怕麻烦的人直接使用网络防火墙禁止DO的一切网络访问，不怕麻烦的，像我一样关闭DO的自动升级就行了（首选项-其他-选项-自动检查程序更新），关掉之后重启，再检查一下是否又复原，如果复原的话再关，一般不需要超过2次。反正被验证了大不了按以上方法搞回来。</li>
<li>关于第二步，事实证明DO的卸载程序还是很厚道的，所有非注册表内容都删掉了，所以不要自作聪明用专门的卸载软件去卸它，反而效果不好。</li>
<li>关于第三步，原作者说可能不需要，经我测试的确是没用的。</li>
<li>关于第四步，要注意的是“默认”本身也是一个键值，但没法也不必删掉</li>
<li>关于第五步，经测试v9.1.1.8 Build 3352不存在以上文件残留</li>
</ul>
</blockquote>
<p>　　这个方法本来就是针对旧版本写的，至少9.1.1.8版本目前只需要做第三、四步就可以了。本方法不一定适用于更新的版本，请注意。</p>
<p>Related posts:<ol>
<li><a href='http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/' rel='bookmark' title='慎改Android的Hosts文件'>慎改Android的Hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/how-to-purchase-android-apps-use-i809-at-mainland-china/' rel='bookmark' title='在国行双网机（如i909/i809）上使用Android Market购买app研究小结'>在国行双网机（如i909/i809）上使用Android Market购买app研究小结</a></li>
<li><a href='http://blog.williamgates.biz/2011/11/do-not-and-do-not-edit-hosts-of-android/' rel='bookmark' title='再谈不要乱改Android的hosts文件'>再谈不要乱改Android的hosts文件</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2009/06/how-to-uninstall-directory-opus-completely/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>NOD32升级服务器——WG个人提供</title>
		<link>http://blog.williamgates.biz/2009/02/wg-nod32-update-server/</link>
		<comments>http://blog.williamgates.biz/2009/02/wg-nod32-update-server/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 03:23:37 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[LilyStudio]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[技术心得]]></category>
		<category><![CDATA[NOD32]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[折腾]]></category>
		<category><![CDATA[服务]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/?p=322</guid>
		<description><![CDATA[　　试着公布一下我自己建的NOD32升级服务器（仅限v3，测试阶段，可能不稳定，随时可能改密码）： 　　地址：http://nod32.williamgates.biz 　　用户名：williamgates 　　密码：nodnod 　　密码可能常常修改，修改规则未定，一旦不能升级请及时来看本帖，所有修改都将在本帖发布。 Related posts: 再谈不要乱改Android的hosts文件 慎改Android的Hosts文件 在国行双网机（如i909/i809）上使用Android Market购买app研究小结]]></description>
			<content:encoded><![CDATA[<p>　　试着公布一下我自己建的NOD32升级服务器（仅限v3，测试阶段，可能不稳定，随时可能改密码）：</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">　　地址：http://nod32.williamgates.biz
　　用户名：williamgates
　　密码：nodnod</pre></div></div>

<p>　　密码可能常常修改，修改规则未定，一旦不能升级请及时来看本帖，所有修改都将在本帖发布。</p>
<p>Related posts:<ol>
<li><a href='http://blog.williamgates.biz/2011/11/do-not-and-do-not-edit-hosts-of-android/' rel='bookmark' title='再谈不要乱改Android的hosts文件'>再谈不要乱改Android的hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/' rel='bookmark' title='慎改Android的Hosts文件'>慎改Android的Hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/how-to-purchase-android-apps-use-i809-at-mainland-china/' rel='bookmark' title='在国行双网机（如i909/i809）上使用Android Market购买app研究小结'>在国行双网机（如i909/i809）上使用Android Market购买app研究小结</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2009/02/wg-nod32-update-server/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>在虚拟主机上架设NOD32升级服务器</title>
		<link>http://blog.williamgates.biz/2009/02/setup-nod32-update-server-on-hostmonster/</link>
		<comments>http://blog.williamgates.biz/2009/02/setup-nod32-update-server-on-hostmonster/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 03:16:00 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[技术心得]]></category>
		<category><![CDATA[HostMonster]]></category>
		<category><![CDATA[NOD32]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[折腾]]></category>
		<category><![CDATA[虚拟主机]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/?p=317</guid>
		<description><![CDATA[　　常给朋友和同事推荐NOD32，但是给他们装的时候往往没有升级服务器可用，他们既不会自己上网去搜索一些免费的升级地址，我也不大方便把drl的服务器给他们用——于是决定自己架设一个。 　　自己没有架在公众网的服务器，只有虚拟主机，到底能不能做到呢？下面就以我的HostMonster主机为例，来一步步尝试。 　　所需条件：支持SSH、cron的主机。 　　一、安装unrar 　　nod32升级的第一步就是下载update.ver文件，这是一个更新包的列表文件，用于增量升级。要命的是这个文件是rar包——天知道他们怎么想的——绝大多数商业的虚拟主机由于版权的原因不可能预装rar，所以我们只能自己装一个。 　　首先创建一个目录，建议在public_html之外，即无法通过apache访问到的目录，用于存放rarlinux程序文件。然后从官方网站下载rarlinux http://www.rarlab.com/rar/rarlinux-3.6.0.tar.gz 　　解压 tar zxvf rarlinux-3.6.0.tar.gz 　　这里要注意的是，Debian系统用3.6以下或以上的版本都会出现库文件错误，只有3.6不需要任何折腾就能使用，反正只是用来解压缩一个文件，还是老老实实用3.6吧。 　　解压之后得到rar目录，unrar就在目录中，无须安装，由于没有权限，就不要用make install了，反正不安装也能用。 　　二、编写升级脚本 　　这里使用php脚本自动从升级服务器下载文件，假设wget在系统中路径是/usr/bin/wget，unrar（刚才解压出来的地址）是/home/rar/unrar，我们升级文件的绝对路径为/home/public_html/nod32/，实际公开的地址是nod32.a.com，上层升级服务器是nod32.b.com/nod32/，用户名a，密码b（以上全都是虚构），那么脚本如下（抄袭自drl的jindui，根据我的情况略有修改，并修改了一处BUG） 　　文件&#8221;v3.php&#8221; &#60; ? $base='/home/public_html/nod32/'; $LOCALDIR = $base; $UPDATEDIR = $base; $TEMPDIR = $base.'tmp/'; $WGET = &#34;/usr/bin/wget --user-agent='ESS Update (Windows; U; 32bit; VDB 1924; BPC 3; OS: 6.0.6000 SP 0.0 NT; CH 1.1; LNG 1033; x32c;' &#34;; $UNRAR = '/home/rar/unrar'; [...]]]></description>
			<content:encoded><![CDATA[<p>　　常给朋友和同事推荐NOD32，但是给他们装的时候往往没有升级服务器可用，他们既不会自己上网去搜索一些免费的升级地址，我也不大方便把drl的服务器给他们用——于是决定自己架设一个。<br />
　　自己没有架在公众网的服务器，只有虚拟主机，到底能不能做到呢？下面就以我的HostMonster主机为例，来一步步尝试。<br />
　　所需条件：支持SSH、cron的主机。</p>
<p>　　一、安装unrar<br />
　　nod32升级的第一步就是下载update.ver文件，这是一个更新包的列表文件，用于增量升级。要命的是这个文件是rar包——天知道他们怎么想的——绝大多数商业的虚拟主机由于版权的原因不可能预装rar，所以我们只能自己装一个。<br />
　　首先创建一个目录，建议在public_html之外，即无法通过apache访问到的目录，用于存放rarlinux程序文件。然后从官方网站下载rarlinux</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">http:<span style="color: #000000; font-weight: bold;">//</span>www.rarlab.com<span style="color: #000000; font-weight: bold;">/</span>rar<span style="color: #000000; font-weight: bold;">/</span>rarlinux-3.6.0.tar.gz</pre></div></div>

<p>　　解压</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">tar</span> zxvf rarlinux-3.6.0.tar.gz</pre></div></div>

<p>　　这里要注意的是，Debian系统用3.6以下或以上的版本都会出现库文件错误，只有3.6不需要任何折腾就能使用，反正只是用来解压缩一个文件，还是老老实实用3.6吧。<br />
　　解压之后得到rar目录，unrar就在目录中，无须安装，由于没有权限，就不要用make install了，反正不安装也能用。</p>
<p>　　二、编写升级脚本<br />
　　这里使用php脚本自动从升级服务器下载文件，假设wget在系统中路径是/usr/bin/wget，unrar（刚才解压出来的地址）是/home/rar/unrar，我们升级文件的绝对路径为/home/public_html/nod32/，实际公开的地址是nod32.a.com，上层升级服务器是nod32.b.com/nod32/，用户名a，密码b（以上全都是虚构），那么脚本如下（抄袭自drl的jindui，根据我的情况略有修改，并修改了一处BUG）<br />
<span id="more-317"></span><br />
　　文件&#8221;v3.php&#8221;</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ? 
<span style="color: #000088;">$base</span><span style="color: #339933;">=</span><span style="color: #0000ff;">'/home/public_html/nod32/'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$LOCALDIR</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$base</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$UPDATEDIR</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$base</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$TEMPDIR</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$base</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'tmp/'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$WGET</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/usr/bin/wget  --user-agent='ESS Update (Windows; U; 32bit; VDB 1924; BPC 3; OS: 6.0.6000 SP 0.0 NT; CH 1.1; LNG 1033; x32c;' &quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$UNRAR</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/home/rar/unrar'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$UPDATE_SERVER</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://nod32.b.com/'</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$updateurl</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">${UPDATE_SERVER}</span>/nod32/update.ver&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;nod32.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>　　文件&#8221;nod32.php&#8221;</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ? 
<span style="color: #000088;">$UNRAR</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/home/rar/unrar'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$update</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">${UPDATEDIR}</span>update.ver&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$updatetmp</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">${UPDATEDIR}</span>update.tmp&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$USER</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'a'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$PASS</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'b'</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #666666; font-style: italic;">//$ignore = array('fr.nup', 'ge.nup', 'it.nup', 'jp.nup', 'pl.nup', 'pt.nup', 'sk.nup', 'sp.nup', 'hr.nup', 'hu.nup', 'nl.nup'); </span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_dir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$LOCALDIR</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$LOCALDIR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_dir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$UPDATEDIR</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$UPDATEDIR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_dir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$TEMPDIR</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$TEMPDIR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//copy($update,$updatetmp);</span>
<span style="color: #990000;">exec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$WGET</span> -t 15 -T 60 -N -nH -nd -P <span style="color: #006699; font-weight: bold;">$UPDATEDIR</span> <span style="color: #006699; font-weight: bold;">$updateurl</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$output</span><span style="color: #339933;">,</span> <span style="color: #000088;">$ret</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">/*$md51=exec(&quot;md5 -q $update&quot;);
$md52=exec(&quot;md5 -q $updatetmp&quot;);
unlink($updatetmp);
&nbsp;
if($md51==$md52) {
         echo &quot;no update need   !&quot;;
        exit;
&nbsp;
}*/</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$ret</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Failed while downloading update.ver.'</span><span style="color: #339933;">;</span> 
    <span style="color: #990000;">exit</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #990000;">exec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$UNRAR</span> x -y -o+ <span style="color: #006699; font-weight: bold;">{$UPDATEDIR}</span>update.ver <span style="color: #006699; font-weight: bold;">{$TEMPDIR}</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$output</span><span style="color: #339933;">,</span> <span style="color: #000088;">$ret</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">{$TEMPDIR}</span>update.ver&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #990000;">preg_match_all</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/file=(\/[\/a-z0-9\-\_\.]+)\W+size=([0-9]+)\W/ise&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content</span><span style="color: #339933;">,</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$list</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$num</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//这句话我修改了一下，将字符串开头的&quot;/&quot;去掉了</span>
<span style="color: #666666; font-style: italic;">//否则地址会有两个&quot;/&quot;，造成文件大小无法比对，每次都会重新下载全部的文件）</span>
    <span style="color: #000088;">$size</span><span style="color: #339933;">=</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$num</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$filesize</span><span style="color: #339933;">=</span><span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$base</span><span style="color: #339933;">.</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span><span style="color: #339933;">!=</span><span style="color: #000088;">$filesize</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$list</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">{$UPDATE_SERVER}</span><span style="color: #006699; font-weight: bold;">$file</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;the file size of   <span style="color: #006699; font-weight: bold;">$file</span>  is same, skip <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
preg_match_all(&quot;/file=(.+?)\n/ie&quot;, $content, $matches); 
&nbsp;
$list = ''; 
foreach($matches[1] as $match) { 
    $match = trim($match); 
    $last = substr($match, -6); 
&nbsp;
    if (!in_array($last, $ignore)) 
        $list .= &quot;{$UPDATE_SERVER}$match\r\n&quot;; 
} */</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#file_put_contents('list.txt', $list); 
</span><span style="color: #000088;">$handle</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;list.txt&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;w&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">fwrite</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$handle</span><span style="color: #339933;">,</span> <span style="color: #000088;">$list</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$handle</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">exec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$WGET</span> --http-user=<span style="color: #006699; font-weight: bold;">$USER</span> --http-passwd=<span style="color: #006699; font-weight: bold;">$PASS</span> -t 15  -T 60 -m -nH -P <span style="color: #006699; font-weight: bold;">$LOCALDIR</span> -i list.txt&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$output</span><span style="color: #339933;">,</span> <span style="color: #000088;">$ret</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$ret</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Failed while downloading files.'</span><span style="color: #339933;">;</span> 
    <span style="color: #990000;">exit</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Updated successfully.'</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>　　现在从浏览器访问v3.php（这两个脚本无所谓放在哪里，只要是能通过apache访问到的目录就行，建议单独设置目录以便我们下面说的安全保护），就已经可以成功下载文件了。</p>
<p>　　三、安全保护<br />
　　为了不让普通用户主动运行升级脚本，也不让别人可以查看你的上层升级服务器的地址，我选择了密码保护，直接在HostMonster的控制面板里设置就行了，否则自己写文件有点麻烦。对你存放v3.php和nod32.php的目录设置一个用户名和密码，我们这里假设用户名是abc，密码是123。将一个单独的子域名（例如abc.a.com）指向这个目录。用浏览器访问就会弹出提示输入用户名密码的对话框。这无所谓，反正我们只要用lynx就行——一个Linux命令行下的浏览器（其实wget也行）。<br />
　　运行这个命令</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">lynx</span> <span style="color: #660033;">-cfg</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #660033;">-source</span> <span style="color: #660033;">-auth</span>=abc:<span style="color: #000000;">123</span> http:<span style="color: #000000; font-weight: bold;">//</span>abc.a.com<span style="color: #000000; font-weight: bold;">/</span>v3.php</pre></div></div>

<p>　　其中-cfg参数是指定配置文件，这里指定为空（否则会出错），-source表示纯字符串输出，-auth是密码验证的功能。<br />
　　可以看到输出一串结果，说明下载成功或者文件已存在不用下载。<br />
　　然后用同样的方法对下载来的文件存放的目录即本例中的/home/public_html/nod32/设置一个密码，是用来发布给别人升级时用的，记得不要和前面那个一样哦。</p>
<p>　　四、定时运行任务<br />
　　要让php脚本定时运行，虽然也可以用CGI方式运行php，但是我还是倾向于用浏览器，这样较为安全。<br />
　　编写一个nod32.sh文件（假设你的sh在/bin/，lynx在/usr/bin/，不清楚的话可以用whereis sh查到），同样放在apache无法取到的目录下，假设还是放在/home/rar/</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">lynx</span> <span style="color: #660033;">-cfg</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #660033;">-source</span> <span style="color: #660033;">-auth</span>=abc:<span style="color: #000000;">123</span> http:<span style="color: #000000; font-weight: bold;">//</span>abc.a.com<span style="color: #000000; font-weight: bold;">/</span>v3.php</pre></div></div>

<p>　　然后在虚拟主机的控制面板里设置Cron任务，更新频率每12小时吧，命令为</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">sh</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>rar<span style="color: #000000; font-weight: bold;">/</span>nod32.sh</pre></div></div>

<p>　　这样就完成了，你的程序会自动定时去上层服务器下载升级文件并存放在/home/public_html/nod32/，你只需要设置nod32.a.com指向该目录，就可以公开发布这个地址了。</p>
<p>　　最后，公布一下我自己建的<a href="http://blog.williamgates.biz/2009/02/wg-nod32-update-server/">NOD32升级服务器</a><br />
　　</p>
<p>Related posts:<ol>
<li><a href='http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/' rel='bookmark' title='慎改Android的Hosts文件'>慎改Android的Hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/how-to-purchase-android-apps-use-i809-at-mainland-china/' rel='bookmark' title='在国行双网机（如i909/i809）上使用Android Market购买app研究小结'>在国行双网机（如i909/i809）上使用Android Market购买app研究小结</a></li>
<li><a href='http://blog.williamgates.biz/2011/11/do-not-and-do-not-edit-hosts-of-android/' rel='bookmark' title='再谈不要乱改Android的hosts文件'>再谈不要乱改Android的hosts文件</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2009/02/setup-nod32-update-server-on-hostmonster/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>更换Blog域名</title>
		<link>http://blog.williamgates.biz/2008/12/blog-domain-name-change/</link>
		<comments>http://blog.williamgates.biz/2008/12/blog-domain-name-change/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 15:38:37 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[灌水胡诌]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[域名]]></category>
		<category><![CDATA[折腾]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/?p=178</guid>
		<description><![CDATA[　　借搬迁之机，干脆更换了Blog的域名 新域名为blog.williamgates.biz 以前的williamgates.lilystudio.org现在被301到新域名，原来的主页和permalink访问起来都是正常的，该域名一段时间后将不再使用 请各位乡亲父老务必更新自己网站中的友情链接，以方便以后访问我的blog，并且方便我新域名正确被google收录和评定pagerank 请各位乡亲父老务必更换自己阅读器中的rss地址，新地址为blog.williamgates.biz/feed/ 　　就是这样，感谢各位朋友一直以来的支持。 Related posts: 再谈不要乱改Android的hosts文件 慎改Android的Hosts文件 备份永远不嫌多]]></description>
			<content:encoded><![CDATA[<p>　　借搬迁之机，干脆更换了Blog的域名
<ol>
<li>新域名为blog.williamgates.biz</li>
<li>以前的williamgates.lilystudio.org现在被301到新域名，原来的主页和permalink访问起来都是正常的，该域名一段时间后将不再使用</li>
<li>请各位乡亲父老务必更新自己网站中的友情链接，以方便以后访问我的blog，并且方便我新域名正确被google收录和评定pagerank</li>
<li>请各位乡亲父老务必更换自己阅读器中的rss地址，新地址为blog.williamgates.biz/feed/</li>
</ol>
<p>　　就是这样，感谢各位朋友一直以来的支持。</p>
<p>Related posts:<ol>
<li><a href='http://blog.williamgates.biz/2011/11/do-not-and-do-not-edit-hosts-of-android/' rel='bookmark' title='再谈不要乱改Android的hosts文件'>再谈不要乱改Android的hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/' rel='bookmark' title='慎改Android的Hosts文件'>慎改Android的Hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/backup-and-backup-more/' rel='bookmark' title='备份永远不嫌多'>备份永远不嫌多</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2008/12/blog-domain-name-change/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>搬迁blog到HostMonster</title>
		<link>http://blog.williamgates.biz/2008/12/move-to-hostmonster/</link>
		<comments>http://blog.williamgates.biz/2008/12/move-to-hostmonster/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 15:26:50 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[灌水胡诌]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[HostMonster]]></category>
		<category><![CDATA[IPowerWeb]]></category>
		<category><![CDATA[折腾]]></category>
		<category><![CDATA[虚拟主机]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/?p=175</guid>
		<description><![CDATA[　　完全受不了IPowerWeb近乎当机的破速度了（除了它的首页，我打不开它任何的页面，也包括其上我自己的blog），加上刚好快要到期，和DlzM一合计，决定搬迁到HostMonster，一个在国内口碑不错的主机商。 　　上次上了低速、低服务水平和低技术实力的IPowerWeb的当，这次希望有所改观——我只希望能顺畅打开页面而已——毕竟我们一次买了两年…… 　　HostMonster让我感兴趣的特性包括（相较于IPowerWeb，别的我没用过）： 无限空间、流量 中文控制面板 自动备份系统，可以手动选择备份文件用于恢复，IPower要联系管理员才能找回备份（还常常找不到），自动备份功能还要收费 强大的文件管理器，功能可以说非常完整，甚至包含了很方便的代码和html编辑器 匿名FTP功能 强大的日志和日志分析功能（IPower虽然也有但常常出问题，并且功能不多） SSH访问 两种自动程序安装功能（Simple Scripts和Fantastico），IPower的此功能只有一种且要收费 更加优秀的技术水平，这个举不出明确的例子，但是在使用的两天内很明显的感到了。 　　另外一个莫名其妙的现象就是WordPress的中文tag的permalink没有任何问题了，不知道是2.7的功劳还是新主机的功劳。 　　只希望——不要刚过了免费退款期限就不好用，以及——伟大圣明的天朝不要在莫名其妙把我的主机线路变慢了。 Related posts: 慎改Android的Hosts文件 备份永远不嫌多 在国行双网机（如i909/i809）上使用Android Market购买app研究小结]]></description>
			<content:encoded><![CDATA[<p>　　完全受不了<a href="http://www.ipowerweb.com/">IPowerWeb</a>近乎当机的破速度了（除了它的首页，我打不开它任何的页面，也包括其上我自己的blog），加上刚好快要到期，和<a href="http://www.dlzm.net/">DlzM</a>一合计，决定搬迁到<a href="http://www.hostmonster.com/">HostMonster</a>，一个在国内口碑不错的主机商。<br />
　　上次上了低速、低服务水平和低技术实力的IPowerWeb的当，这次希望有所改观——我只希望能顺畅打开页面而已——毕竟我们一次买了两年……<br />
　　HostMonster让我感兴趣的特性包括（相较于IPowerWeb，别的我没用过）：</p>
<ul>
<li>无限空间、流量</li>
<li>中文控制面板</li>
<li>自动备份系统，可以手动选择备份文件用于恢复，IPower要联系管理员才能找回备份（还常常找不到），自动备份功能还要收费</li>
<li>强大的文件管理器，功能可以说非常完整，甚至包含了很方便的代码和html编辑器</li>
<li>匿名FTP功能</li>
<li>强大的日志和日志分析功能（IPower虽然也有但常常出问题，并且功能不多）</li>
<li>SSH访问</li>
<li>两种自动程序安装功能（Simple Scripts和Fantastico），IPower的此功能只有一种且要收费</li>
<li>更加优秀的技术水平，这个举不出明确的例子，但是在使用的两天内很明显的感到了。</li>
</ul>
<p>　　另外一个莫名其妙的现象就是WordPress的中文tag的permalink没有任何问题了，不知道是2.7的功劳还是新主机的功劳。<br />
　　只希望——不要刚过了免费退款期限就不好用，以及——伟大圣明的天朝不要在莫名其妙把我的主机线路变慢了。</p>
<p>Related posts:<ol>
<li><a href='http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/' rel='bookmark' title='慎改Android的Hosts文件'>慎改Android的Hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/backup-and-backup-more/' rel='bookmark' title='备份永远不嫌多'>备份永远不嫌多</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/how-to-purchase-android-apps-use-i809-at-mainland-china/' rel='bookmark' title='在国行双网机（如i909/i809）上使用Android Market购买app研究小结'>在国行双网机（如i909/i809）上使用Android Market购买app研究小结</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2008/12/move-to-hostmonster/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>修改了Blog的permalink</title>
		<link>http://blog.williamgates.biz/2008/08/my-blog-permalink-changed/</link>
		<comments>http://blog.williamgates.biz/2008/08/my-blog-permalink-changed/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 09:35:35 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[灌水胡诌]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[折腾]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/?p=143</guid>
		<description><![CDATA[　　正如你所看到的，RSS阅读器里那些过去的按PostID标识的链接已经不起作用；现在的链接全都是年份+月份+PostName的格式。这也是搜索引擎最喜欢的格式。其实我一直都记得修改每一篇文章的PostSlug，然而我一直羞于自己的英文水平，不敢拿出来。经过前几天对于中文tag的折腾，现在我想通了，还是用英文链接最好，那么多米国人用这种链接模式，也都是口语化的，随便几个不能凑成一句话的词也行，比如我这篇的PostName就很口语化。 　　至于搜索引擎以前收录的页面可能也不能访问，各位朋友指向我某篇文章的链接可能也不能访问，管我啥事。 Related posts: 慎改Android的Hosts文件 备份永远不嫌多 在国行双网机（如i909/i809）上使用Android Market购买app研究小结]]></description>
			<content:encoded><![CDATA[<p>　　正如你所看到的，RSS阅读器里那些过去的按PostID标识的链接已经不起作用；现在的链接全都是年份+月份+PostName的格式。这也是搜索引擎最喜欢的格式。其实我一直都记得修改每一篇文章的PostSlug，然而我一直羞于自己的英文水平，不敢拿出来。经过前几天对于中文tag的折腾，现在我想通了，还是用英文链接最好，那么多米国人用这种链接模式，也都是口语化的，随便几个不能凑成一句话的词也行，比如我这篇的PostName就很口语化。<br />
　　至于搜索引擎以前收录的页面可能也不能访问，各位朋友指向我某篇文章的链接可能也不能访问，管我啥事。</p>
<p>Related posts:<ol>
<li><a href='http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/' rel='bookmark' title='慎改Android的Hosts文件'>慎改Android的Hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/backup-and-backup-more/' rel='bookmark' title='备份永远不嫌多'>备份永远不嫌多</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/how-to-purchase-android-apps-use-i809-at-mainland-china/' rel='bookmark' title='在国行双网机（如i909/i809）上使用Android Market购买app研究小结'>在国行双网机（如i909/i809）上使用Android Market购买app研究小结</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2008/08/my-blog-permalink-changed/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>升级WordPress到2.5</title>
		<link>http://blog.williamgates.biz/2008/04/update-wordpress-to-ver25/</link>
		<comments>http://blog.williamgates.biz/2008/04/update-wordpress-to-ver25/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 13:04:48 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[技术心得]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[折腾]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/?p=131</guid>
		<description><![CDATA[　　我们可爱可恨的主机商终于解决了MySQL的问题，他们终于肯掏钱往集群里填服务器了……连续大概一个月的巨慢速度终于告别，我也可以升级WordPress了。 　　其实这个Blog的WordPress是在主机速度最慢的时候升级的，另一个Blog才是今天升级的。具体升级步骤我就不说了，网上到处都是，把两次升级的经验并在一起说说吧。 　　一、修改文件 　　解决中文Tag支持的mod依然可用（也就是说WordPress依然不准备解决这个问题），即修改wp-includes目录下的rewrite.php中的 function get_tag_permastruct() 中的 if &#40;empty&#40;$this-&#62;permalink_structure&#41;&#41; &#123; 改为 if &#40;!empty&#40;$this-&#62;permalink_structure&#41;&#41; &#123; 　　我自创的“让text widget在标题中显示图标”，需要有一些改变： wp-includes目录下的widgets.php中的 function wp_widget_text_control($widget_args) 中的 $title = strip_tags&#40;stripslashes&#40;$widget_text&#91;'title'&#93;&#41;&#41;; 改为 $title = stripslashes&#40;$widget_text&#91;'title'&#93;&#41;; 而把这句 $title = attribute_escape&#40;$options&#91;$number&#93;&#91;'title'&#93;&#41;; 改为 $title = format_to_edit&#40;$options&#91;$number&#93;&#91;'title'&#93;&#41;; 　　可以看出来，函数的参数和语句都与2.3.3不同了。 　　二、自动升级插件 　　这个插件叫做wordpress-automatic-upgrade，它可以大幅度简化你升级WordPress的过程，对我们这种上传下载都缓慢的国内用户更是如此。 　　它的全部操作都在WordPress的控制面板中完成，只要激活该插件，然后在Manage的wordpress automatic upgrade项里一直点下一步就好了。它会自动备份好你的文件、数据库并提供链接给你下载；会自动禁用你的所有插件、关闭你的blog并且自动下载最新版本的wordpress，更新所有的文件，最后恢复所有的插件和被暂时关闭的blog。一切都按照指引做就好了，完全不用从FTP上传下载任何东西，非常方便快捷。 　　要注意的是，它的备份文件功能只备份WordPress本身的文件，也就是说不包括content目录。你自己上传的插件、图片和其他内容还请自己下载备份。 　　好了，来享用你的WP 2.5吧，我觉得最好用的功能是插件自动升级和tag管理，另外后台管理界面的大变脸让人觉得很不错，并且后台似乎也加上了一定的缓存，可能是SQL查询缓存等，后台的速度和整个网站的速度都有一定提高。 Related posts: 慎改Android的Hosts文件 在国行双网机（如i909/i809）上使用Android Market购买app研究小结 再谈不要乱改Android的hosts文件]]></description>
			<content:encoded><![CDATA[<p>　　我们可爱可恨的主机商终于解决了MySQL的问题，他们终于肯掏钱往集群里填服务器了……连续大概一个月的巨慢速度终于告别，我也可以升级WordPress了。<br />
　　其实这个Blog的WordPress是在主机速度最慢的时候升级的，另一个Blog才是今天升级的。具体升级步骤我就不说了，网上到处都是，把两次升级的经验并在一起说说吧。</p>
<p>　　一、修改文件<br />
　　解决中文Tag支持的mod依然可用（也就是说WordPress依然不准备解决这个问题），即修改wp-includes目录下的rewrite.php中的 <code>function get_tag_permastruct()</code> 中的</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">permalink_structure</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></pre></div></div>

<p>改为</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">permalink_structure</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></pre></div></div>

<p>　　我自创的<a href="http://blog.williamgates.biz/2008/02/goodbye-icp-records-05/">“让text widget在标题中显示图标”</a>，需要有一些改变：<br />
<span id="more-131"></span><br />
wp-includes目录下的widgets.php中的 <code>function wp_widget_text_control($widget_args)</code> 中的</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strip_tags</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">stripslashes</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$widget_text</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>改为</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> <span style="color: #990000;">stripslashes</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$widget_text</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>而把这句</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> attribute_escape<span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$number</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>改为</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> format_to_edit<span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$number</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>　　可以看出来，函数的参数和语句都与2.3.3不同了。</p>
<p>　　二、自动升级插件<br />
　　这个插件叫做<a href="http://wordpress.org/extend/plugins/wordpress-automatic-upgrade/">wordpress-automatic-upgrade</a>，它可以大幅度简化你升级WordPress的过程，对我们这种上传下载都缓慢的国内用户更是如此。<br />
　　它的全部操作都在WordPress的控制面板中完成，只要激活该插件，然后在Manage的wordpress automatic upgrade项里一直点下一步就好了。它会自动备份好你的文件、数据库并提供链接给你下载；会自动禁用你的所有插件、关闭你的blog并且自动下载最新版本的wordpress，更新所有的文件，最后恢复所有的插件和被暂时关闭的blog。一切都按照指引做就好了，完全不用从FTP上传下载任何东西，非常方便快捷。<br />
　　要注意的是，它的备份文件功能只备份WordPress本身的文件，也就是说不包括content目录。你自己上传的插件、图片和其他内容还请自己下载备份。</p>
<p>　　好了，来享用你的WP 2.5吧，我觉得最好用的功能是插件自动升级和tag管理，另外后台管理界面的大变脸让人觉得很不错，并且后台似乎也加上了一定的缓存，可能是SQL查询缓存等，后台的速度和整个网站的速度都有一定提高。</p>
<p>Related posts:<ol>
<li><a href='http://blog.williamgates.biz/2011/09/do-not-edit-hosts-of-android-unless-necessary/' rel='bookmark' title='慎改Android的Hosts文件'>慎改Android的Hosts文件</a></li>
<li><a href='http://blog.williamgates.biz/2011/10/how-to-purchase-android-apps-use-i809-at-mainland-china/' rel='bookmark' title='在国行双网机（如i909/i809）上使用Android Market购买app研究小结'>在国行双网机（如i909/i809）上使用Android Market购买app研究小结</a></li>
<li><a href='http://blog.williamgates.biz/2011/11/do-not-and-do-not-edit-hosts-of-android/' rel='bookmark' title='再谈不要乱改Android的hosts文件'>再谈不要乱改Android的hosts文件</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2008/04/update-wordpress-to-ver25/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

