<?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; Linux</title>
	<atom:link href="http://blog.williamgates.biz/category/tech/linux/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>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>WordPress+WP-SuperCache之中文tag的Permalink问题全解析</title>
		<link>http://blog.williamgates.biz/2008/08/url-encoding-problem-in-wordpress-with-wp-super-cache/</link>
		<comments>http://blog.williamgates.biz/2008/08/url-encoding-problem-in-wordpress-with-wp-super-cache/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 04:50:17 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[技术心得]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/?p=152</guid>
		<description><![CDATA[　　WordPress的中文支持有问题，特别是在使用Permalink的时候，这个大家都知道。本文将分析其中的原因和网上流传的多种解决方案，并给出一个具体的解决结论。 　　这个问题主要表现为，在默认情况下，Wordpress对于形如这样的链接（链接1）： 　　 www.example.com/tag/中文 　　不能正常访问，会产生404或500错误，或者其他的错误。 　　而对于这样的链接（链接2）： 　　 www.example.com/?tag=中文 　　WordPress就能够正确解析。 　　原因：参见这篇文章和这篇文章，这是URL编码问题造成的。对于上面的链接1，这是一个PathInfo，对于链接2，这是一个QueryString。事实证明，对于UTF-8的页面，IE和FF都会正确发送PathInfo和QueryString（而不像有些文章中说的，他们在不同的设置下会有错误的反应），但服务器端，IIS会将PathInfo转换成GBK编码从而造成错误，于是Windows下的此类问题只需要转回来就行了；但是Linux下，Apache不支持中文PathInfo，要么通过这篇文章中的方法来对Apache进行改造，要么只能像我一样，Linux主机无法使用中文permalink。于是，我们只能寻找绕路的方法。 　　解决方案分析： 　　一、转换编码（参见这篇文章） 　　原理是，IIS会将PathInfo中的UTF-8转换成GBK，而QueryString中就不会转换，故而为了使用Permalink，采用以下方法： 　　打开wp-includesclasses.php文件，找到第44行和第50行： if &#40; isset&#40;$_SERVER&#91;'PATH_INFO'&#93;&#41; &#41; $pathinfo = $_SERVER&#91;'PATH_INFO'&#93;; else $pathinfo = ''; $pathinfo_array = explode&#40;'?', $pathinfo&#41;; $pathinfo = str_replace&#40;&#34;%&#34;, &#34;%25&#34;, $pathinfo_array&#91;0&#93;&#41;; $req_uri = $_SERVER&#91;'REQUEST_URI'&#93;; 改为 if &#40; isset&#40;$_SERVER&#91;'PATH_INFO'&#93;&#41; &#41; $pathinfo = mb_convert_encoding&#40;$_SERVER&#91;'PATH_INFO'&#93;, &#34;UTF-8&#34;, &#34;GBK&#34;&#41;; else $pathinfo = ''; $pathinfo_array = explode&#40;'?', $pathinfo&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>　　WordPress的中文支持有问题，特别是在使用Permalink的时候，这个大家都知道。本文将分析其中的原因和网上流传的多种解决方案，并给出一个具体的解决结论。<br />
　　这个问题主要表现为，在默认情况下，Wordpress对于形如这样的链接（链接1）：<br />
　　</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">www.example.com/tag/中文</pre></div></div>

<p>　　不能正常访问，会产生404或500错误，或者其他的错误。<br />
　　而对于这样的链接（链接2）：<br />
　　</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">www.example.com/?tag=中文</pre></div></div>

<p>　　WordPress就能够正确解析。</p>
<p>　　原因：参见<a href="http://akun-007.javaeye.com/blog/222624">这篇文章</a>和这篇文章，这是URL编码问题造成的。对于上面的链接1，这是一个PathInfo，对于链接2，这是一个QueryString。事实证明，对于UTF-8的页面，IE和FF都会正确发送PathInfo和QueryString（而不像有些文章中说的，他们在不同的设置下会有错误的反应），但服务器端，IIS会将PathInfo转换成GBK编码从而造成错误，于是Windows下的此类问题只需要转回来就行了；但是Linux下，Apache不支持中文PathInfo，要么通过<a href="http://www.iceboy.cn/show-15-1.html">这篇文章</a>中的方法来对Apache进行改造，要么只能像我一样，<strong>Linux主机无法使用中文permalink</strong>。于是，我们只能寻找绕路的方法。<br />
<span id="more-152"></span><br />
　　解决方案分析：<br />
　　一、转换编码（参见<a href="http://www.bolarn.com/index.php/2008/01/26/52/">这篇文章</a>）<br />
　　原理是，IIS会将PathInfo中的UTF-8转换成GBK，而QueryString中就不会转换，故而为了使用Permalink，采用以下方法：<br />
　　打开wp-includesclasses.php文件，找到第44行和第50行：</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;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'PATH_INFO'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #000088;">$pathinfo</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'PATH_INFO'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span>
  <span style="color: #000088;">$pathinfo</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pathinfo_array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'?'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pathinfo</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pathinfo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;%&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;%25&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pathinfo_array</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$req_uri</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REQUEST_URI'</span><span style="color: #009900;">&#93;</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: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'PATH_INFO'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #000088;">$pathinfo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mb_convert_encoding</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'PATH_INFO'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;GBK&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span>
  <span style="color: #000088;">$pathinfo</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pathinfo_array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'?'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pathinfo</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pathinfo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;%&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;%25&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pathinfo_array</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$req_uri</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mb_convert_encoding</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REQUEST_URI'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;GBK&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>　　局限：只对Windows主机、且必须是Windows下的IIS主机有效。</p>
<p>　　二、修改rewrite.php（参见<a href="http://www.allove.org/index.php/archives/wordpress-tags.html">这篇文章</a>）<br />
　　这是网上最常见的方法，原理是，让WordPress在对其他内容使用Permalink的时候，对tag不使用，而使用链接2的QueryString模式发送中文编码：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> get_tag_permastruct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tag_structure</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tag_structure</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<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> <span style="color: #666666; font-style: italic;">//-----this line need change------</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tag_structure</span> <span style="color: #339933;">=</span> ”<span style="color: #339933;">;</span>
<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>把第5行改为</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>　　局限：没有起到Permalink的“漂亮”作用，如果不能自己修改WP的文件就没办法了。</p>
<p>　　三、修改tag base（参见<a href="http://www.myfcys.cn/blog/index.php/2008.05/15">这篇文章</a>，经过我研究改造）<br />
　　原理同上，只要让WordPress在打开了Permalink功能后继续对tag不理不问就行了。那么，欺骗WordPress，让它用链接2的格式来显示Permalink，可行么？可行，因为WordPress可以自定义Permalink的形式：<br />
　　在WordPress的 Settings &#8211; Permalinks &#8211; Tag base 中填上<br />
　　</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">/</span>?tag<span style="color: #339933;">=</span></pre></div></div>

<p>　　注意&#8221;"不能少，引用原文中的写法不对。另外要注意每次输入&#8221;"，WP都会再次转义为&#8221;\&#8221;，所以每次点提交都会把&#8221;"翻一倍，点两次就是&#8221;\\&#8221;，所以不要多点，一次就对了。<br />
　　这个方法的结果是使得链接变成这个样子<br />
 　　</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">www.example.com/?tag=/中文/</pre></div></div>

<p>　　多出来的斜杠对于服务器丝毫没有影响，还是被视为QueryString，效果同上。<br />
　　局限是链接变得更加不好看了，更为致命的是插件生成的Sitemap中，tag链接会变成错误的形式，如果你很在乎Sitemap，请不要使用这个方法，除非你真的无法修改自己的rewrite.php文件。</p>
<p>　　但是当你使用WP-SuperCache或者类似的缓存插件时，它会加入自己的rewrite规则，所有请求先由自己判断，不在缓存中或者不符合缓存规则才交由WordPress处理。但问题在于，它不支持中文URL的解析，哪怕是QueryString也不行。于是我们必须绕过它。<br />
　　这是WP-SuperCache在.htaccess文件里所添加的rewrite规则</p>

<div class="wp_syntax"><div class="code"><pre class="xorg_conf" style="font-family:monospace;">RewriteEngine On
RewriteBase /
&nbsp;
RewriteCond %<span class="br0">&#123;</span>REQUEST_METHOD<span class="br0">&#125;</span> !=POST
RewriteCond %<span class="br0">&#123;</span>QUERY_STRING<span class="br0">&#125;</span> !.*s=.*
RewriteCond %<span class="br0">&#123;</span>QUERY_STRING<span class="br0">&#125;</span> !.*p=.*
RewriteCond %<span class="br0">&#123;</span>QUERY_STRING<span class="br0">&#125;</span> !.*attachment_id=.*
RewriteCond %<span class="br0">&#123;</span>QUERY_STRING<span class="br0">&#125;</span> !.*wp-subscription-manager=.*
RewriteCond %<span class="br0">&#123;</span>HTTP_COOKIE<span class="br0">&#125;</span> !^.*<span class="br0">&#40;</span>comment_author_|wordpress|wp-postpass_<span class="br0">&#41;</span>.*$
RewriteCond %<span class="br0">&#123;</span>HTTP:Accept-Encoding<span class="br0">&#125;</span> gzip
RewriteCond %<span class="br0">&#123;</span>DOCUMENT_ROOT<span class="br0">&#125;</span>/wp-content/cache/supercache/%<span class="br0">&#123;</span>HTTP_HOST<span class="br0">&#125;</span>/$1/index.html.gz -f
RewriteRule ^<span class="br0">&#40;</span>.*<span class="br0">&#41;</span> /wp-content/cache/supercache/%<span class="br0">&#123;</span>HTTP_HOST<span class="br0">&#125;</span>/$1/index.html.gz <span class="br0">&#91;</span>L<span class="br0">&#93;</span>
&nbsp;
RewriteCond %<span class="br0">&#123;</span>REQUEST_METHOD<span class="br0">&#125;</span> !=POST
RewriteCond %<span class="br0">&#123;</span>QUERY_STRING<span class="br0">&#125;</span> !.*s=.*
RewriteCond %<span class="br0">&#123;</span>QUERY_STRING<span class="br0">&#125;</span> !.*p=.*
RewriteCond %<span class="br0">&#123;</span>QUERY_STRING<span class="br0">&#125;</span> !.*wp-subscription-manager=.*
RewriteCond %<span class="br0">&#123;</span>QUERY_STRING<span class="br0">&#125;</span> !.*attachment_id=.*
RewriteCond %<span class="br0">&#123;</span>HTTP_COOKIE<span class="br0">&#125;</span> !^.*<span class="br0">&#40;</span>comment_author_|wordpress|wp-postpass_<span class="br0">&#41;</span>.*$
RewriteCond %<span class="br0">&#123;</span>DOCUMENT_ROOT<span class="br0">&#125;</span>/wp-content/cache/supercache/%<span class="br0">&#123;</span>HTTP_HOST<span class="br0">&#125;</span>/$1/index.html -f
RewriteRule ^<span class="br0">&#40;</span>.*<span class="br0">&#41;</span> /wp-content/cache/supercache/%<span class="br0">&#123;</span>HTTP_HOST<span class="br0">&#125;</span>/$1/index.html <span class="br0">&#91;</span>L<span class="br0">&#93;</span></pre></div></div>

<p>　　我们要做的就是不让它去判断中文tag链接，在两个 RewriteCond %{REQUEST_METHOD} !=POST 后面分别加入这样一句：</p>

<div class="wp_syntax"><div class="code"><pre class="xorg_conf" style="font-family:monospace;">RewriteCond %<span class="br0">&#123;</span>QUERY_STRING<span class="br0">&#125;</span> !.*tag=.*</pre></div></div>

<p>　　含义是如果QueryString中含有tag字样，请不要解析（交给下一条规则，一般来说就是WordPress的index.php了）。</p>
<p>　　结论：<br />
　　Windows+IIS主机下，通过方案一可以完美解决中文tag问题<br />
　　Linux+Apache主机下，<strong>不能使用中文Permalink</strong>，除非修改Apache，否则只有用方案二和方案三绕行。<br />
　　方案二是较为推荐的方法，但是搭配WP-SuperCache使用的时候，需要自己在.htaccess文件中加入一条不处理tag链接的规则。</p>
<p>Related posts:<ol>
<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/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/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/08/url-encoding-problem-in-wordpress-with-wp-super-cache/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>虚拟主机空间打开Zend Optimizer的相关问题</title>
		<link>http://blog.williamgates.biz/2008/03/enable-zend-optimizer-for-website-host/</link>
		<comments>http://blog.williamgates.biz/2008/03/enable-zend-optimizer-for-website-host/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 04:48:38 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术心得]]></category>
		<category><![CDATA[IPowerWeb]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/2008/03/23/130</guid>
		<description><![CDATA[　　还记得我在这篇文章里提到过IPowerWeb的空间不支持php5打开Zend Optimizer么？现在看起来是我搞错了，但是IPowerWeb给的默认值是不打开Zend Optimizer的，就是因为这一点害得我研究了半天。 　　首先，由于IPowerWeb的MySQL主机前一段时间的问题，数据库访问慢得要命，我不得不把环境换成php5，换上WordPress的mysqli数据库连接，于是我面临在php5下面打开Zend Optimizer的挑战。挑战在于，由于服务商没有提供默认打开Zend Optimizer的配置文件，我根本不知道Zend Optimizer的路径…… 　　首先，尝试用php4环境下的IPower提供的默认配置文件，内容是 &#91;Zend&#93; zend_optimizer.optimization_level=15 zend_optimizer.encoder_loader=0 zend_extension_manager.optimizer=/usr/local/Zend/Zend-2.5.7/lib/Optimizer-2.5.7 zend_extension_manager.optimizer_ts=/usr/local/Zend/Zend-2.5.7/lib/Optimizer_TS-2.5.7 zend_extension=/usr/local/Zend/Zend-2.5.7/lib/ZendExtensionManager.so zend_extension_ts=/usr/local/Zend/Zend-2.5.7/lib/ZendExtensionManager_TS.so 　　从phpinfo的显示来看，似乎是成功了，但是总觉得不爽，总觉得哪里有问题。 　　突然想到一招，用phpspy可以看到自己主机空间的其他目录，而不是被chroot在自己的根目录里。果然，进入/usr/local/Zend/，看到Zend-2.5.7，Zend-2.6.2，lib等目录。进入lib，发现有各个版本的Optimizer目录，这些目录下还有对应不同php版本的目录。于是就简单了，查一查zend_extension和zend_extension_manager.optimizer这两个设置项的含义就明白了，zend_extension是为了引用extension_manager，而zend_extension_manager.optimizer指示extension_manager调用Zend Optimizer。于是我写上 &#91;Zend&#93; zend_optimizer.optimization_level=511 zend_optimizer.encoder_loader=0 zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.2.0 zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.2.0 　　那个511是我个人觉得合适的值，这个值的含义很容易搜到，就不详述了。注意zend_extension_manager.optimizer不能写到具体的.so文件，只能写到相应版本的Optimizer目录，连下面的php版本对应的目录都不能写进去。 　　事实证明，IPowerWeb提供的php4环境下的默认值虽然能用，但也不如我上面这个来得好。上面这个对php4和5都通用。 　　最后你应该看到phpinfo里面有这样的内容（版本可能有不同） This program makes use of the Zend Scripting Language Engine: Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies 　　with Zend Extension Manager v1.0.11, Copyright (c) 2003-2006, by [...]]]></description>
			<content:encoded><![CDATA[<p>　　还记得我在<a href="http://blog.williamgates.biz/2008/02/goodbye-icp-records-06/">这篇文章</a>里提到过IPowerWeb的空间不支持php5打开Zend Optimizer么？现在看起来是我搞错了，但是IPowerWeb给的默认值是不打开Zend Optimizer的，就是因为这一点害得我研究了半天。</p>
<p>　　首先，由于IPowerWeb的MySQL主机前一段时间的问题，数据库访问慢得要命，我不得不把环境换成php5，换上<a href="http://michaelshadle.com/category/development/wordpress/">WordPress的mysqli数据库连接</a>，于是我面临在php5下面打开Zend Optimizer的挑战。挑战在于，由于服务商没有提供默认打开Zend Optimizer的配置文件，我根本不知道Zend Optimizer的路径……<br />
<span id="more-130"></span><br />
　　首先，尝试用php4环境下的IPower提供的默认配置文件，内容是</p>

<div class="wp_syntax"><div class="code"><pre class="xorg_conf" style="font-family:monospace;"><span class="br0">&#91;</span>Zend<span class="br0">&#93;</span>
zend_optimizer.optimization_level=<span style="color: #cc66cc;">15</span>
zend_optimizer.encoder_loader=<span style="color: #cc66cc;">0</span>
zend_extension_manager.optimizer=/usr/local/Zend/Zend-2.5.7/lib/Optimizer-2.5.7
zend_extension_manager.optimizer_ts=/usr/local/Zend/Zend-2.5.7/lib/Optimizer_TS-2.5.7
zend_extension=/usr/local/Zend/Zend-2.5.7/lib/ZendExtensionManager.so
zend_extension_ts=/usr/local/Zend/Zend-2.5.7/lib/ZendExtensionManager_TS.so</pre></div></div>

<p>　　从phpinfo的显示来看，似乎是成功了，但是总觉得不爽，总觉得哪里有问题。</p>
<p>　　突然想到一招，用<a href="http://www.4ngel.net/project/phpspy.htm">phpspy</a>可以看到自己主机空间的其他目录，而不是被chroot在自己的根目录里。果然，进入/usr/local/Zend/，看到Zend-2.5.7，Zend-2.6.2，lib等目录。进入lib，发现有各个版本的Optimizer目录，这些目录下还有对应不同php版本的目录。于是就简单了，查一查zend_extension和zend_extension_manager.optimizer这两个设置项的含义就明白了，zend_extension是为了引用extension_manager，而zend_extension_manager.optimizer指示extension_manager调用Zend Optimizer。于是我写上</p>

<div class="wp_syntax"><div class="code"><pre class="xorg_conf" style="font-family:monospace;"><span class="br0">&#91;</span>Zend<span class="br0">&#93;</span>
zend_optimizer.optimization_level=<span style="color: #cc66cc;">511</span>
zend_optimizer.encoder_loader=<span style="color: #cc66cc;">0</span>
zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so
zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so
zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.2.0
zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.2.0</pre></div></div>

<p>　　那个511是我个人觉得合适的值，这个值的含义很容易搜到，就不详述了。注意zend_extension_manager.optimizer不能写到具体的.so文件，只能写到相应版本的Optimizer目录，连下面的php版本对应的目录都不能写进去。<br />
　　事实证明，IPowerWeb提供的php4环境下的默认值虽然能用，但也不如我上面这个来得好。上面这个对php4和5都通用。<br />
　　最后你应该看到phpinfo里面有这样的内容（版本可能有不同）</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
　　with Zend Extension Manager v1.0.11, Copyright (c) 2003-2006, by Zend Technologies
　　with Zend Optimizer v3.2.0, Copyright (c) 1998-2006, by Zend Technologies</pre></div></div>

<p>　　这样就大功告成了。</p>
<p>　　所以以后如果虚拟主机有什么扩展软件等需要查询安装地址（例如<a href="http://www.imagemagick.org">ImageMagicK</a>），就用phpspy上到主机的根目录去查查路径就好了。</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/03/enable-zend-optimizer-for-website-host/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>巧用FTPRush删除Linux主机上的乱码文件</title>
		<link>http://blog.williamgates.biz/2008/02/use-ftprush-to-delete-files-with-chaos-code-name/</link>
		<comments>http://blog.williamgates.biz/2008/02/use-ftprush-to-delete-files-with-chaos-code-name/#comments</comments>
		<pubDate>Sun, 03 Feb 2008 07:59:40 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术心得]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/2008/02/03/124</guid>
		<description><![CDATA[　　如你所知，折腾的人永远有折腾得的事情好做，比如我今天想要试试看IPower的解压功能，一不小心解了一个中文名的文件到了用户根目录，解压出文件权限是644，文件名是一堆乱码……用FTPRush删除无效，重命名无效，移动也无效；PhpSpy的文件管理功能删除、重命名、移动也全都无效。 　　网上搜索Linux下删除乱码文件的方法，内容一大堆，但无一不需要使用Shell；唯一我可以使用的办法，就是用PhpSpy执行命令，用输入输出重定向来把ls输出的文件名直接导给rm命令；但是怎么试验都不成功，毕竟我只能执行一行命令，没法用vi（需要编辑ls生成的文件）。后来偶然看到有人说FTP可以删除，我试过了没用啊？难道有什么地方忽略了？ 　　我突然想到我的FTPRush是Unicode版的，而FTPRush的列表命令有一个编码的选择。打开工具-站点管理窗口-双击你的站点-目录列表方式-站点目录的字符集-选择WE/latin1(850)（大部分没有设置过locale的主机应该是这样），然后再登录FTP，发现乱码变了样子；删除之，一下子就成功了！ 　　结论：用FTP方式可以删除大部分乱码文件，除非有真正的系统不能接受的字符；但是删除的时候要确保你列出的文件名是正确的，这时候就需要把列表方式的编码设置正确。 Related posts: 慎改Android的Hosts文件 在国行双网机（如i909/i809）上使用Android Market购买app研究小结 再谈不要乱改Android的hosts文件]]></description>
			<content:encoded><![CDATA[<p>　　如你所知，折腾的人永远有折腾得的事情好做，比如我今天想要试试看IPower的解压功能，一不小心解了一个中文名的文件到了用户根目录，解压出文件权限是644，文件名是一堆乱码……用FTPRush删除无效，重命名无效，移动也无效；<a href="http://www.4ngel.net/project/phpspy.htm">PhpSpy</a>的文件管理功能删除、重命名、移动也全都无效。<br />
　　网上搜索Linux下删除乱码文件的方法，内容一大堆，但无一不需要使用Shell；唯一我可以使用的办法，就是用<a href="http://www.4ngel.net/project/phpspy.htm">PhpSpy</a>执行命令，用输入输出重定向来把ls输出的文件名直接导给rm命令；但是怎么试验都不成功，毕竟我只能执行一行命令，没法用vi（需要编辑ls生成的文件）。后来偶然看到有人说FTP可以删除，我试过了没用啊？难道有什么地方忽略了？<br />
　　我突然想到我的FTPRush是Unicode版的，而FTPRush的列表命令有一个编码的选择。打开<strong>工具</strong>-<strong>站点管理窗口</strong>-双击你的站点-<strong>目录列表方式</strong>-<strong>站点目录的字符集</strong>-选择<strong>WE/latin1(850)</strong>（大部分没有设置过locale的主机应该是这样），然后再登录FTP，发现乱码变了样子；删除之，一下子就成功了！<br />
　　结论：用FTP方式可以删除大部分乱码文件，除非有真正的系统不能接受的字符；但是删除的时候要确保你列出的文件名是正确的，这时候就需要把列表方式的编码设置正确。</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/02/use-ftprush-to-delete-files-with-chaos-code-name/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>再见了,ICP备(六)虚拟主机的其他应用以及与IPowerWeb空间的php.ini相关的各种问题</title>
		<link>http://blog.williamgates.biz/2008/02/goodbye-icp-records-06/</link>
		<comments>http://blog.williamgates.biz/2008/02/goodbye-icp-records-06/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 06:45:27 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术心得]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[IPowerWeb]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/2008/02/01/121</guid>
		<description><![CDATA[　　买了虚拟主机，除了放Blog，还可以做些什么用？IPowerWeb的空间看起来还不错，用起来有哪些毛病，怎么解决？下面我们来讲这些问题。 　　一、虚拟主机的其他应用 　　除了Blog，php空间当然可以有点别的用处，比如： 　　1、网盘 　　1500G容量的空间，当然可以用来存放点东西，但是php下的网盘程序或者是文件分享程序（区别在于是否提供提取码，供别人下载），基本上没有特别著名和权威的。 　　如果要用有提取码的，我推荐使用“拓网文件上传共享系统V1.0”（该公司现在似乎已经遗忘了这个php产品，已经全面转向asp产品了），这个东西的免费版可以从网上随意下到，但是不支持用户管理（也就是谁都可以上传，建议在上传页面用.htaccess文件设一个密码）。它提供了上传、管理文件和提取码的功能。 　　如果只是要一个自己保存文件的东西，这个更适合：Uploader，搜索“Uploader Samoa汉化版”即可下载到。这个提供了用户管理，但是不提供给别人下载的功能，只是自己使用而已；但是你可以通过直接提供地址、或者使用WordPress的WP-DownloadManager插件来实现类似于提取的下载。 　　注意，要上传文件，请确保php.ini中的file_uploads为ON，并且以下几项最好达到或者超过我所说的数值： max_execution_time = 600 max_input_time = 180 memory_limit = 64M post_max_size = 210M upload_max_filesize = 200M 　　2、WebFTP 　　顾名思义就是在网页上使用的FTP软件，但是我高估了它的作用，以为”保存到本地“的功能意味着可以”保存到服务器“，结果在服务器上安装之后，发现还是只能下载到我的电脑上，实现”从一台服务器下载另一台服务器的文件“还需要别的方法（下面会说）。 　　虽然如此，但精致的界面和功能还是让我想要推荐一下这个软件：net2ftp，我觉得其实可以在校园网或者单位内网安装这个东西，可以省去大部分人使用FTP客户端的麻烦。 　　3、文件转移 　　我想从英国的主机商那里把我以前上传的一些文件转移过来（好几G，下载到本地再上传到美国估计要几天时间），条件是： 两台主机之间对传很快，控制者（我）进行中转则很慢 两者的FTP都不支持FXP 两者都是php空间，所有的文件都可以通过http或者FTP来下载 两者都不提供SSH 　　这种时候应该怎么让做呢？首先想到的是上面那个网页FTP，但是不如人愿；然后想到的是利用Cron来调用wget，但是IPower控制面板中的Cron似乎在权限上做了一点限制（或者是我不会用吧），未能成功；第三想到的是利用php调用系统命令，或者php自己的下载功能来下载，但我是php代码盲，看懂一半还行，写几乎一句都写不出来，所以决定上网寻找已经做好的工具……还真有 　　（1）Rapidget（也叫a2b) 　　这个玩意明确写着唯一的功能就是在一个服务器上，从另一个服务器下载文件……非常小巧，但做得很不错，能自己选择保存路径、能使用代理、还有进度条，唯一的问题是它是基于php的自身函数来下载文件的，所以受php.ini中文件大小、运行时间和内存等的限制。由于网上已经很难下载到，连作者都不提供下载了，所以我放上来给大家。 　　（2）PhpSpy 　　这是一个php后门程序，可以管理文件，最重要的是可以执行命令。所以把这个程序上传，并且上传一个URL.dat的要下载文件的文件名列表（用FTPRush在源FTP上列出），用 wget -i URL.dat -B http://Example.com/example/ 　　就好了，其中-i表示从文件读取要下载的文件链接；-B从文件读取的链接需要加上前缀（因为我在URL.dat里只放了文件名）。这个方法比前一个方法更适合于下载大量文件，而且由于调用系统命令，不受php的内存等限制。但过于多的文件还是要考虑超时问题，建议把php.ini中的超时设长一点，并且以此不要下载太多的文件。下载地址http://www.4ngel.net/ 　　我就是用了这第二种方法，一个小时不到就把4G多的文件转移过来了。两者之间对传的速度超过2M/s（Rapidget测的）。 　　当然，php空间可以装论坛、CMS等各种玩意，这些东西网上广为流传，我这里就不介绍了。 　　二、IPowerWeb空间的Bug 　　1、Zend问题 　　我知道旧版本的Zend和php5不兼容，所以当你选择php版本为php5的时候，默认的php.ini文件中没有Zend一项，而且IPower提供的Zend模块也不够新，加上了Zend的内容估计也不能运行。 　　但是php4默认不开Zend也太不够厚道了，但是当你选了php5再改回php4的时候，默认的文件就有Zend这一项了，我也不知道怎么搞的……反正无论如何，如果你发现自己的站点没有打开Zend，在php.ini的末尾加入以下内容（路径仅适用于IPowerWeb的虚拟主机，其他空间请自行修改路径） &#91;Zend&#93; zend_optimizer.optimization_level=15 zend_extension_manager.optimizer=/usr/local/Zend/Zend-2.5.7/lib/Optimizer-2.5.7 zend_extension_manager.optimizer_ts=/usr/local/Zend/Zend-2.5.7/lib/Optimizer_TS-2.5.7 zend_extension=/usr/local/Zend/Zend-2.5.7/lib/ZendExtensionManager.so [...]]]></description>
			<content:encoded><![CDATA[<p>　　买了虚拟主机，除了放Blog，还可以做些什么用？IPowerWeb的空间看起来还不错，用起来有哪些毛病，怎么解决？下面我们来讲这些问题。</p>
<p>　　一、虚拟主机的其他应用<br />
　　除了Blog，php空间当然可以有点别的用处，比如：</p>
<p>　　1、网盘<br />
　　1500G容量的空间，当然可以用来存放点东西，但是php下的网盘程序或者是文件分享程序（区别在于是否提供提取码，供别人下载），基本上没有特别著名和权威的。<br />
　　如果要用有提取码的，我推荐使用“拓网文件上传共享系统V1.0”（<a href="http://www.topwang.com/">该公司</a>现在似乎已经遗忘了这个php产品，已经全面转向asp产品了），这个东西的免费版可以从网上随意下到，但是不支持用户管理（也就是谁都可以上传，建议在上传页面用.htaccess文件设一个密码）。它提供了上传、管理文件和提取码的功能。<br />
　　如果只是要一个自己保存文件的东西，这个更适合：Uploader，搜索“Uploader Samoa汉化版”即可下载到。这个提供了用户管理，但是不提供给别人下载的功能，只是自己使用而已；但是你可以通过直接提供地址、或者使用WordPress的<a href="http://lesterchan.net/portfolio/programming.php">WP-DownloadManager</a>插件来实现类似于提取的下载。<br />
　　注意，要上传文件，请确保php.ini中的<code>file_uploads</code>为ON，并且以下几项最好达到或者超过我所说的数值：</p>

<div class="wp_syntax"><div class="code"><pre class="xorg_conf" style="font-family:monospace;">max_execution_time = <span style="color: #cc66cc;">600</span>
max_input_time = <span style="color: #cc66cc;">180</span>
memory_limit = 64M
post_max_size = 210M
upload_max_filesize = 200M</pre></div></div>

<p>　　2、WebFTP<br />
　　顾名思义就是在网页上使用的FTP软件，但是我高估了它的作用，以为”保存到本地“的功能意味着可以”保存到服务器“，结果在服务器上安装之后，发现还是只能下载到我的电脑上，实现”从一台服务器下载另一台服务器的文件“还需要别的方法（下面会说）。<br />
　　虽然如此，但精致的界面和功能还是让我想要推荐一下这个软件：<a href="http://www.net2ftp.com/">net2ftp</a>，我觉得其实可以在校园网或者单位内网安装这个东西，可以省去大部分人使用FTP客户端的麻烦。<br />
<span id="more-121"></span><br />
　　3、文件转移<br />
　　我想从英国的主机商那里把我以前上传的一些文件转移过来（好几G，下载到本地再上传到美国估计要几天时间），条件是：
<ul>
<li>两台主机之间对传很快，控制者（我）进行中转则很慢</li>
<li>两者的FTP都不支持FXP</li>
<li>两者都是php空间，所有的文件都可以通过http或者FTP来下载</li>
<li>两者都不提供SSH</li>
</ul>
<p>　　这种时候应该怎么让做呢？首先想到的是上面那个网页FTP，但是不如人愿；然后想到的是利用Cron来调用wget，但是IPower控制面板中的Cron似乎在权限上做了一点限制（或者是我不会用吧），未能成功；第三想到的是利用php调用系统命令，或者php自己的下载功能来下载，但我是php代码盲，看懂一半还行，写几乎一句都写不出来，所以决定上网寻找已经做好的工具……还真有<br />
　　（1）Rapidget（也叫a2b)<br />
　　这个玩意明确写着唯一的功能就是在一个服务器上，从另一个服务器下载文件……非常小巧，但做得很不错，能自己选择保存路径、能使用代理、还有进度条，唯一的问题是它是基于php的自身函数来下载文件的，所以受php.ini中文件大小、运行时间和内存等的限制。由于网上已经很难下载到，连作者都不提供下载了，所以我放上来给大家。Note: There is a file embedded within this post, please visit this post to download the file.</p>
<p>　　（2）PhpSpy<br />
　　这是一个php后门程序，可以管理文件，最重要的是可以执行命令。所以把这个程序上传，并且上传一个URL.dat的要下载文件的文件名列表（用FTPRush在源FTP上列出），用</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-i</span> URL.dat <span style="color: #660033;">-B</span> http:<span style="color: #000000; font-weight: bold;">//</span>Example.com<span style="color: #000000; font-weight: bold;">/</span>example<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>　　就好了，其中-i表示从文件读取要下载的文件链接；-B从文件读取的链接需要加上前缀（因为我在URL.dat里只放了文件名）。这个方法比前一个方法更适合于下载大量文件，而且由于调用系统命令，不受php的内存等限制。但过于多的文件还是要考虑超时问题，建议把php.ini中的超时设长一点，并且以此不要下载太多的文件。下载地址http://www.4ngel.net/<br />
　　我就是用了这第二种方法，一个小时不到就把4G多的文件转移过来了。两者之间对传的速度超过2M/s（Rapidget测的）。</p>
<p>　　当然，php空间可以装论坛、CMS等各种玩意，这些东西网上广为流传，我这里就不介绍了。</p>
<p>　　二、IPowerWeb空间的Bug<br />
　　1、Zend问题<br />
　　我知道旧版本的Zend和php5不兼容，所以当你选择php版本为php5的时候，默认的php.ini文件中没有Zend一项，而且IPower提供的Zend模块也不够新，加上了Zend的内容估计也不能运行。<br />
　　但是php4默认不开Zend也太不够厚道了，但是当你选了php5再改回php4的时候，默认的文件就有Zend这一项了，我也不知道怎么搞的……反正无论如何，如果你发现自己的站点没有打开Zend，在php.ini的末尾加入以下内容（路径仅适用于IPowerWeb的虚拟主机，其他空间请自行修改路径）</p>

<div class="wp_syntax"><div class="code"><pre class="xorg_conf" style="font-family:monospace;"><span class="br0">&#91;</span>Zend<span class="br0">&#93;</span>
zend_optimizer.optimization_level=<span style="color: #cc66cc;">15</span>
zend_extension_manager.optimizer=/usr/local/Zend/Zend-2.5.7/lib/Optimizer-2.5.7
zend_extension_manager.optimizer_ts=/usr/local/Zend/Zend-2.5.7/lib/Optimizer_TS-2.5.7
zend_extension=/usr/local/Zend/Zend-2.5.7/lib/ZendExtensionManager.so
zend_extension_ts=/usr/local/Zend/Zend-2.5.7/lib/ZendExtensionManager_TS.so</pre></div></div>

<p>　　2、phpMyAdmin问题<br />
　　IPowerWeb空间的瓶颈似乎在Web服务器和MySQL服务器之间的连接，从Web服务器登录数据库实在是缓慢，导致装在Web服务器中的phpMyAdmin（比如WordPress的WP-phpMyAdmin插件）几乎从来不能正常运行。我的建议是：一、用IPower控制面板中的那个phpMyAdmin，反正默认都是UTF8，用起来也没啥问题；二、像我一样喜欢追求新版本的，请自行修改php.ini以提供够大的内存和够长的超时时间……(要修改的条目前面已经说过了）</p>
<p>　　3、Session问题<br />
　　这是最致命的问题，当你装上我这里提到的Uploader，”拓网上传系统“和WP-phpMyAdmin之后会发现，前者如果不记录登陆状况就会自动跳出，后两者根本无法登陆，我仔细研究发现是session无法启用的问题。但是上网搜遍了，都说session问题是php.ini中配置的问题，但是这么专业的公司怎么会在默认配置文件中写错呢？<br />
　　事实证明，不要迷信权威，要自己试验，我把[Session]节中的session.save_path由默认的var/tmp-sessions(好象是这个，忘了）改成了我在虚拟主机的web根目录下建的一个目录，并且把权限改为777，果然能用了！看来，要在IPower空间中使用session，请自行建立一个目录并且把完整地址（控制面板中左栏显示的很长的那个Linux下的完整地址）设为session.save_path。</p>
<p>　　至此，整个IPowerWeb空间已经搞定，我的Blog也运行自如了，最后一集是感慨和废话……敬请期待。</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/02/goodbye-icp-records-06/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>部署Squid3.0的心得</title>
		<link>http://blog.williamgates.biz/2006/08/setup-squid/</link>
		<comments>http://blog.williamgates.biz/2006/08/setup-squid/#comments</comments>
		<pubDate>Sun, 13 Aug 2006 15:32:32 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术心得]]></category>
		<category><![CDATA[Squid]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/2006/08/13/34</guid>
		<description><![CDATA[部署的是squid-3.0.PRE4.tar.gz，不加iptables，不使用任何外加插件 下面不是部署全过程，只是一点心得 一、configure的时候要注意参数 如果要使用HTTPS，要加上&#8211;enable-ssl（我加了才发现用不到……） 如果要在定义ACL的时候使用arp选项（即使用MAC地址来判定用户）需要加上&#8211;enable-arp-acl 如果要允许解析的URL中出现下划线，要加上&#8211;enable-underscore，因为默认情况下Squid会认为带下划线的URL是非法的，并拒绝访问该地址。这个我没试过 二、ACL配置 如果不加载第三方工具，ACL配置是Squid中唯一的访问控制方法。这个东西的功能其实跟CCProxy的身份控制差不多（但是没有用户名密码认证功能），但是配置起来要更复杂也更强大。 配置格式：acl aclname acltype string1 常用的定义类型： src ip-address/netmask src addr1-addr2/netmask 用来源的IP地址定义，一个ip#即mask方式就是网络，cidr方式就是单个ip acl aclname dst ip-address/netmask 目标地址 acl aclname arp mac-address 后悔编译的时候没加&#8211;enable-arp-acl参数，这个功能很有用的 acl aclname dstdomain .foo.com 类似于CCProxy的访问限制，例如可以限制只能访问.cn的站点、不能访问.xxx的站点等等 acl aclname dstdom_regex [-i] xxx 用正则，不过……谁这么无聊呢…… acl aclname http_status 200 301 500- 400-403 根据HTTP Response返回值，这个很有效，比如规定302Moved就不访问 acl aclname port 端口 acl aclname proto [...]]]></description>
			<content:encoded><![CDATA[<p>部署的是squid-3.0.PRE4.tar.gz，不加iptables，不使用任何外加插件<br />
下面不是部署全过程，只是一点心得</p>
<p>一、configure的时候要注意参数</p>
<ul>
<li>如果要使用HTTPS，要加上&#8211;enable-ssl（我加了才发现用不到……）</li>
<li>如果要在定义ACL的时候使用arp选项（即使用MAC地址来判定用户）需要加上&#8211;enable-arp-acl</li>
<li>如果要允许解析的URL中出现下划线，要加上&#8211;enable-underscore，因为默认情况下Squid会认为带下划线的URL是非法的，并拒绝访问该地址。这个我没试过</li>
</ul>
<p>二、ACL配置<br />
如果不加载第三方工具，ACL配置是Squid中唯一的访问控制方法。这个东西的功能其实跟CCProxy的身份控制差不多（但是没有用户名密码认证功能），但是配置起来要更复杂也更强大。</p>
<ul>
配置格式：<em>acl aclname acltype string1</em>
</ul>
<ul>
常用的定义类型：</p>
<li>src      ip-address/netmask<br />
src      addr1-addr2/netmask<br />
用来源的IP地址定义，一个ip#即mask方式就是网络，cidr方式就是单个ip</li>
<li>acl aclname dst      ip-address/netmask<br />
目标地址</li>
<li>acl aclname arp      mac-address<br />
后悔编译的时候没加&#8211;enable-arp-acl参数，这个功能很有用的</li>
<li>acl aclname dstdomain   .foo.com<br />
类似于CCProxy的访问限制，例如可以限制只能访问.cn的站点、不能访问.xxx的站点等等</li>
<li>acl aclname dstdom_regex [-i] xxx<br />
用正则，不过……谁这么无聊呢……</li>
<li>acl aclname http_status 200 301 500- 400-403<br />
根据HTTP Response返回值，这个很有效，比如规定302Moved就不访问</li>
<li>acl aclname port<br />
端口</li>
<li>acl aclname proto<br />
协议</li>
<li>acl aclname method<br />
方式，例如只能GET不能CONNECT</li>
<li>
acl aclname browser  [-i] regexp<br />
这个也太强了……限制浏览器用户代理标志类型</li>
</ul>
<p>还可以规定mime类型、响应时间等等等等……绝对强大<br />
<span id="more-34"></span><br />
我的ACL设置：<br />
很简单的设置，没有用复杂的功能限制</p>
<p>以下是默认的，直接使用了：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">acl all src 0.0.0.0<span style="color: #000000; font-weight: bold;">/</span>0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1<span style="color: #000000; font-weight: bold;">/</span>255.255.255.255
acl to_localhost dst 127.0.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">8</span>
acl SSL_ports port <span style="color: #000000;">443</span> <span style="color: #000000;">563</span>
acl Safe_ports port <span style="color: #000000;">80</span>		<span style="color: #666666; font-style: italic;"># http</span>
acl Safe_ports port <span style="color: #000000;">21</span>		<span style="color: #666666; font-style: italic;"># ftp</span>
acl Safe_ports port <span style="color: #000000;">443</span> <span style="color: #000000;">563</span>	<span style="color: #666666; font-style: italic;"># https, snews</span>
acl Safe_ports port <span style="color: #000000;">70</span>		<span style="color: #666666; font-style: italic;"># gopher</span>
acl Safe_ports port <span style="color: #000000;">210</span>		<span style="color: #666666; font-style: italic;"># wais</span>
acl Safe_ports port <span style="color: #000000;">1025</span>-<span style="color: #000000;">65535</span>	<span style="color: #666666; font-style: italic;"># unregistered ports</span>
acl Safe_ports port <span style="color: #000000;">280</span>		<span style="color: #666666; font-style: italic;"># http-mgmt</span>
acl Safe_ports port <span style="color: #000000;">488</span>		<span style="color: #666666; font-style: italic;"># gss-http</span>
acl Safe_ports port <span style="color: #000000;">591</span>		<span style="color: #666666; font-style: italic;"># filemaker</span>
acl Safe_ports port <span style="color: #000000;">777</span>		<span style="color: #666666; font-style: italic;"># multiling http</span>
acl CONNECT method CONNECT</pre></div></div>

<p>以下是我修改的：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">http_access allow CONNECT all 
<span style="color: #666666; font-style: italic;">#默认是这句http_access deny CONNECT !SSL_ports</span>
<span style="color: #666666; font-style: italic;">#这样才能支持使用HTTPS地址前缀，也才能在下级生成Socks、FTP等代理</span>
acl LilyStudio src ip1 ip2
<span style="color: #666666; font-style: italic;">#两个ip地址是我要让其允许访问的</span>
http_access allow LilyStudio
http_access deny all</pre></div></div>

<p>要注意，acl 定义的name是全局的，也就是说不能重复定义一个name，即</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">acl a src 210.29.240.1
acl a src 210.29.240.2</pre></div></div>

<p>只会有后一条起作用</p>
<p>经过这样的配置，Squid就能完整地运行了，下面我们来看看在校园网内部署的时候，必不可少的二级代理的功能</p>
<p>三、二级代理的使用<br />
首先，要使用上级代理可以这样写配置文件</p>
<p><code>cache_peer <em>proxy1</em> parent  <em>port1</em> <em>port2</em> proxy-only login=<em>user</em>:<em>pwd</em> no-query default</code></p>
<ul>
<li>其中proxy1是上级代理的IP地址，port1是其http端口号，port2是icp端口号（打开的话，一般为3130，在此我们使用0，禁用</li>
<li>parent表示这是一个父代理（后面会提到兄弟代理）</li>
<li>login的作用是给上级代理的用户验证</li>
<li>proxy-only表示不进行本地缓存，直接将这个缓存服务器的内容转发给客户</li>
<li>no-query表示不发送icp信息</li>
<li>default表示这个代理是“最后的”选择，即如果所有线路都不通就发送给它，特别在不使用icp的时候有用</li>
</ul>
<p>　　Squid还支持所谓的兄弟代理（Sibling类型），对于父代理，Squid会一直向其要数据（如果没有本地缓存），等不到回应就无动作或返回超时；对于兄弟代理，Squid先从其上寻找数据，找不到则自己直接去访问数据，简而言之兄弟代理是另一个缓存而已。</p>
<p>以下这段是转的：</p>
<blockquote><p>
一般 Squid Server 运作的模式是：<br />
1. 当 Squid Server 没有资料时，会先向 Sibling 的 Squid Server 要资料，如果 Sibling 没资料，就跳过它直接向 Parent 要。<br />
2. 向 Parent 要资料，然後一直等，直到 Parent 给它资料为止(Parent 自己有的资料或上 internet 去拿)。<br />
3. 没有 Parent 时，就自己上 internet 去拿。<br />
4. 如果这三者都拿不到资料，才向用户端回报拿不到资料。 </p>
<p>　　一般而言，把网路上一层的 Squid Server  设成 Sibling 是不错的选择，因为网路上一层的 Squid Server 服务对象较多，其硬体较强，离我们比较近，速度也比较快；万一要不到资料，我们还可以自己上 internet 去拿。那什么时候设 Parent？当您的出口只有一个，或上一层 Squid Server 拿不到资料，自己也一定拿不到，只好将上一层 Squid Server 设为 Parent。 </p></blockquote>
<p>四、二级代理中的http CONNECT的问题</p>
<p>首先要确保Http_access中，</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#http_access deny CONNECT !SSL_ports</span></pre></div></div>

<p>这句话要注释掉</p>
<p>然后要写这个（查了官方FAQ才知道的）</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">never_direct allow all</pre></div></div>

<p>所有的访问都不会被直接转向，都必须通过cache_peer<br />
否则所有的GET会被发往上级代理，而CONNECT则会被发往目标地址，由于我们需要所有的情况都使用二级代理，所以需要如此设置</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/2006/08/setup-squid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux下多FTPD的共存，以及突破glftpd的chroot</title>
		<link>http://blog.williamgates.biz/2006/07/mulit-ftpd-under-linux/</link>
		<comments>http://blog.williamgates.biz/2006/07/mulit-ftpd-under-linux/#comments</comments>
		<pubDate>Sun, 09 Jul 2006 17:22:59 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术心得]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[glftpd]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/2006/07/10/25</guid>
		<description><![CDATA[　　新接手一台FTP Server，其上本来的FTPD为vsftpd+ncftpd，vs做前台，仅提供匿名下载，nc做后台，仅给管理员使用。nc很不稳定，效率不高，功能单薄，我准备换成glftpd。但是糟糕的是，ncftpd原来只有一个管理员账号，所有的文件都属于这个用户，而且很多文件权限不是755，甚至只有644。有root当然可以chmod和chown，但是，原来1.5T的数据，且不是高速更新的FTP，如何chown？ 　　glftpd安装的时候，被我装在了 /jail 下，选择了“封闭环境”安装。但是当我尝试把别处的目录mount到它下面的时候，就遇到权限的问题，不仅不能删除很多来自ncftpd的文件，甚至部分文件根本无法访问。最糟糕的是，glftpd下载的时候会写文件（我后来才知道可以关掉这个功能），每下载一次，它会把该文件的GID加一，以方便计算下载总数。 　　于是我们的问题就归结成了，如何让glftpd获得UID不是100（新建用户默认值）的文件的所有权？ 　　翻看glftpd的文档，发现了一个本来应该不相干的内容：如何突破glftpd的chroot。我们都知道glftpd是用root启动的，但是启动后它会立刻换成较低权限的用户去运行，并且将该用户的root限定在某一个固定的目录下（在我的安装中，默认是“封闭环境”的根目录，即 /jail ）有的人需要突破这种限制，比如访问上层目录下的文件。我本来想用mount解决这个问题的，但是它的步骤说明吸引了我： 1. Change all instances of /site to /glftpd/site in your config file 把glftpd.conf配置文件中所有的路径都换成绝对路径，在此，我是 /jail/glftpd 2. Add the pwd_path and grp_path settings to the config file: pwd_path /glftpd/etc/passwd grp_path /glftpd/etc/group 修改passwd和group文件的路径，配置文件中默认没有这两行的 3. Change datapath from /ftp-data to /glftpd/ftp-data 还是改路径 4. Edit /glftpd/etc/passwd and change every user&#8217;s homedir [...]]]></description>
			<content:encoded><![CDATA[<p>　　新接手一台FTP Server，其上本来的FTPD为vsftpd+ncftpd，vs做前台，仅提供匿名下载，nc做后台，仅给管理员使用。nc很不稳定，效率不高，功能单薄，我准备换成glftpd。但是糟糕的是，ncftpd原来只有一个管理员账号，所有的文件都属于这个用户，而且很多文件权限不是755，甚至只有644。有root当然可以chmod和chown，但是，原来1.5T的数据，且不是高速更新的FTP，如何chown？<br />
　　glftpd安装的时候，被我装在了 /jail 下，选择了“封闭环境”安装。但是当我尝试把别处的目录mount到它下面的时候，就遇到权限的问题，不仅不能删除很多来自ncftpd的文件，甚至部分文件根本无法访问。最糟糕的是，glftpd下载的时候会写文件（我后来才知道可以关掉这个功能），每下载一次，它会把该文件的GID加一，以方便计算下载总数。<br />
　　于是我们的问题就归结成了，如何让glftpd获得UID不是100（新建用户默认值）的文件的所有权？<br />
　　翻看glftpd的文档，发现了一个本来应该不相干的内容：如何突破glftpd的chroot。我们都知道glftpd是用root启动的，但是启动后它会立刻换成较低权限的用户去运行，并且将该用户的root限定在某一个固定的目录下（在我的安装中，默认是“封闭环境”的根目录，即 /jail ）有的人需要突破这种限制，比如访问上层目录下的文件。我本来想用mount解决这个问题的，但是它的步骤说明吸引了我：<br />
<span id="more-25"></span></p>
<blockquote><p>
1. Change all instances of /site to /glftpd/site in your config file<br />
把glftpd.conf配置文件中所有的路径都换成绝对路径，在此，我是 /jail/glftpd</p>
<p>2. Add the pwd_path and grp_path settings to the config file:<br />
pwd_path /glftpd/etc/passwd<br />
grp_path /glftpd/etc/group<br />
修改passwd和group文件的路径，配置文件中默认没有这两行的</p>
<p>3. Change datapath from /ftp-data to /glftpd/ftp-data<br />
还是改路径</p>
<p>4. Edit /glftpd/etc/passwd and change every user&#8217;s homedir from /site to /glftpd/site.<br />
修改passwd文件，将家目录改成绝对路径</p>
<p>5. Edit /glftpd/ftp-data/users/default.* and change the HOMEDIR line from /siteto /glftpd/site.<br />
修改新建用户的默认家目录</p>
<p>6. You also need to change paths in some help files in /glftpd/ftp-data/help,possibly some more in /glftpd/ftp-data/text.<br />
我看了所有的这些文件，应该没什么要改的</p></blockquote>
<p>后面是最关键的：</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Make a user, lets say root
site adduser root root *@127.0.0.1
site grpadd wheel root group (or root, depending on the OS you are running)
&nbsp;
Now go edit /glftpd/etc/passwd, you will see that glftpd has the 0:0 uid and gid
just give it 10:100 or 20:200 and give root 0:0, also change root's homedir -
default is /site, change it to /.
&nbsp;
Now edit the group file and move the number of glftpd to 100 or 200 and change roots to 0.</pre></div></div>

<p>　　看到了么，我就是在这发现了突破口！原来glftpd的用户也是可以自定义UID和GID的，那么我只要修改passwd文件，让所有的管理员都拥有root（这样不安全）或者原来的数据所有者（ncftpd的管理员帐户）的GID和UID就行了。我就是这么做的</p>
<p>　　这样，我既可以访问 /jail 以上的目录（/home/ftp/），不用mount了，也可以继续使用原来的数据，不用chmod和chown了。只要使用相同UID和GID的帐号，两个FTPD完全可以共存。（本来准备把所有文件下载再上传呢……谢天谢地）</p>
<p>　　要说明的是，你当然可以使用0:0做你的管理员帐号的UID和GID，但是这样不太安全，加上glftpd一直有chroot泄漏的传言（据说已修复），所以还是设定一个特定的用户为妙。另外，这样不再能使用glftpd的一个特色功能：设定用户的delown和renameown权限，因为所有用户看起来都一样了。但经过实际实验，基于路径的权限分配是没有问题的，基于flag的权限分配也很正常，但是有可能会在site who的时候，看到一个本不属于某个组的成员，显示在这组里（比如我的一个DirAdmin显示成SuperAdmin），但是不会真正拥有权限，放心。</p>
<p>Related posts:<ol>
<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>
<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>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2006/07/mulit-ftpd-under-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

