<?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/%e8%99%9a%e6%8b%9f%e4%b8%bb%e6%9c%ba/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.williamgates.biz</link>
	<description>四片叶子的三叶草</description>
	<lastBuildDate>Tue, 02 Mar 2010 13:30:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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';
$UPDATE_SERVER = 'http://nod32.b.com/'; 
$updateurl=&#34;${UPDATE_SERVER}/nod32/update.ver&#34;;
&#160;
include&#40;&#34;nod32.php&#34;&#41;;
?&#62;

　　文件&#8221;nod32.php&#8221;

&#60; ? 
$UNRAR = '/home/rar/unrar';
$update=&#34;${UPDATEDIR}update.ver&#34;;
$updatetmp=&#34;${UPDATEDIR}update.tmp&#34;;
$USER = 'a';
$PASS = 'b';
&#160;
&#160;
//$ignore = array('fr.nup', 'ge.nup', 'it.nup', 'jp.nup', 'pl.nup', 'pt.nup', [...]]]></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/2009/06/how-to-uninstall-directory-opus-completely/' rel='bookmark' title='Permanent Link: Directory Opus 联网验证被封证书后，清除安装痕迹的方法'>Directory Opus 联网验证被封证书后，清除安装痕迹的方法</a></li>
<li><a href='http://blog.williamgates.biz/2009/11/reload/' rel='bookmark' title='Permanent Link: Reload'>Reload</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到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:Reload
]]></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/2009/11/reload/' rel='bookmark' title='Permanent Link: Reload'>Reload</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2008/12/move-to-hostmonster/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>再见了,ICP备(二)选购国外虚拟主机</title>
		<link>http://blog.williamgates.biz/2008/01/goodbye-icp-records-02/</link>
		<comments>http://blog.williamgates.biz/2008/01/goodbye-icp-records-02/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 11:30:22 +0000</pubDate>
		<dc:creator>WG</dc:creator>
				<category><![CDATA[灌水胡诌]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[IPowerWeb]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[灌水]]></category>
		<category><![CDATA[虚拟主机]]></category>

		<guid isPermaLink="false">http://blog.williamgates.biz/2008/01/29/117</guid>
		<description><![CDATA[　　不管365bit这边的数据能不能抢救回来，要换个地方是肯定的了；到底是买国内的虚拟主机还是国外的，到底买哪家的呢？请看我们的选购过程：
　　一、国内还是国外
　　国内虚拟主机优点：

速度较快
与客服联系方便
不怕篱笆
还有么……

　　特别是DRL老大出售的移动机房VPS（比虚拟主机还好，更加自由，就是麻烦点），到国内各种网络速度都不慢，价钱也很便宜，这个被列为考虑对象。
　　国内虚拟主机缺点：

性价比差
限制太多，不自由
管理技术差，重要的服务器端软件版本混乱，常年不更新
ICP备……

　　国外主机的优点就是国内主机的缺点吧：空间、流量都很宽裕，功能强大、限制较少，技术水平高，最重要的是不需要那个证书……于是，我们决定买国外主机。
　　二、选购国外虚拟主机
　　首先到网上搜索广为推荐的国外虚拟主机，当然，我知道其中有很多软广告，我要自己评价。我的选购标准是：比较便宜，两三个人能买得起；空间和流量并无所谓（相比国内而言，每家国外主机商都算慷慨了）；独立IP、强大的控制面板和较新的软件版本、较自由的配置功能，是我较为重视的；该公司的资信、是否同时经营域名注册（我要转一个域名过去）、支付时限是否太长，也都是需要考虑的问题。我把通过初筛的公司列了一个表，这里摘录如下（与网上提供的总结不同，全部来自于2008年1月底访问的各公司主页的明确说明，并且没有考虑任何的非公开优惠卷）：


	HostGator
600G空间
6000G流量
可设置站点无限
数据库无限
无免费赠送域名
月租$9.95（以12个月一起支付时的价格，下同。一般一次性购买时间越长，月租越便宜）


	IXWebHosting
无限空间
无限流量
可设置站点无限
数据库100个
免费赠送域名2个
月租$7.95


	DreamHost
500G空间（会逐渐增长，难道是Gmail……）
5000G流量（同样会增长）
可设置站点无限
数据库无限
免费赠送域名1个
月租$9.95（买10年的话$5.95，我吃饱了撑的啊）


	GoDaddy
100G空间
1000G流量
可设置站点无限
数据库25个
无免费赠送域名
月租$6.64


	IPowerWeb
1500G空间
15000G流量
可设置站点25个
数据库25个
免费赠送域名1个
月租$7.95（冬季特惠$4.95）

　　从各方面看来，HostGator似乎比较专业，但较贵；IXWebHosting性价比最高，提供的服务最厉害，但是有传言说它一方面稳定性不高，二方面看似什么都不限制，实际上用到一定限度还是会想方设法找你茬的；DreamHost国内评价较差，是因为国内用户买得太多了吧；GoDaddy据说是著名的老牌主机商，但正因为太著名了，大部分IP都被篱笆挡掉了；IPowerWeb中规中矩，似乎国内用户用得很少，但是国际上综合评价颇高。
　　这时候DlzM开始联系这几家的客服，了解一下服务情况。我们发现IPowerWeb由于最近刚提升到现在的容量和流量，所以开启了冬季促销活动，第一年每个月只要$4.95；我们联系了IXWebHosting，向它的客服要一点用于测试速度的站点，但是他不给，说我们有无条件退款政策（也就是说让我们先买了用用看），对这个客服失去信心了。
　　但最可笑的是，我们最后买了一个客服完全不理我们的空间。IPowerWeb的冬季促销看起来很诱人，我们正在犹豫，当我关闭窗口的时候突然跳出来一个对话框（模仿MSN聊天界面），说你别走，我给你再优惠一点怎样，每个月$3.95如何？我晕，难道这是小商品市场买袜子么……但是这招还不错，我们决定既然这么便宜，就买吧……
　　DlzM发信去问这个优惠到底是怎么回事（突然弹出一个窗口你信啊），结果一直没有人回信，我们也等不及了，干脆就买下来。买的时候是27号中午，我当时估计要等我们的夜里他们上班了才能开通吧，结果5分钟之后DlzM发消息过来说，已经能用了……
　　千挑万选了好久，结果选了个自助式小商品市场！


Related posts:Reload
随笔-20091204
好于预期
]]></description>
			<content:encoded><![CDATA[<p>　　不管365bit这边的数据能不能抢救回来，要换个地方是肯定的了；到底是买国内的虚拟主机还是国外的，到底买哪家的呢？请看我们的选购过程：</p>
<p>　　一、国内还是国外<br />
　　国内虚拟主机优点：
<ul>
<li>速度较快</li>
<li>与客服联系方便</li>
<li>不怕篱笆</li>
<li>还有么……</li>
</ul>
<p>　　特别是DRL老大出售的移动机房VPS（比虚拟主机还好，更加自由，就是麻烦点），到国内各种网络速度都不慢，价钱也很便宜，这个被列为考虑对象。<br />
　　国内虚拟主机缺点：
<ul>
<li>性价比差</li>
<li>限制太多，不自由</li>
<li>管理技术差，重要的服务器端软件版本混乱，常年不更新</li>
<li>ICP备……</li>
</ul>
<p>　　国外主机的优点就是国内主机的缺点吧：空间、流量都很宽裕，功能强大、限制较少，技术水平高，最重要的是不需要那个证书……于是，我们决定买国外主机。</p>
<p>　　二、选购国外虚拟主机<br />
　　首先到网上搜索广为推荐的国外虚拟主机，当然，我知道其中有很多软广告，我要自己评价。我的选购标准是：比较便宜，两三个人能买得起；空间和流量并无所谓（相比国内而言，每家国外主机商都算慷慨了）；独立IP、强大的控制面板和较新的软件版本、较自由的配置功能，是我较为重视的；该公司的资信、是否同时经营域名注册（我要转一个域名过去）、支付时限是否太长，也都是需要考虑的问题。我把通过初筛的公司列了一个表，这里摘录如下（与网上提供的总结不同，全部来自于2008年1月底访问的各公司主页的明确说明，并且没有考虑任何的非公开优惠卷）：<br />
<span id="more-117"></span></p>
<ul>
	<strong>HostGator</strong></p>
<li>600G空间</li>
<li>6000G流量</li>
<li>可设置站点无限</li>
<li>数据库无限</li>
<li>无免费赠送域名</li>
<li>月租$9.95（以12个月一起支付时的价格，下同。一般一次性购买时间越长，月租越便宜）</li>
</ul>
<ul>
	<strong>IXWebHosting</strong></p>
<li>无限空间</li>
<li>无限流量</li>
<li>可设置站点无限</li>
<li>数据库100个</li>
<li>免费赠送域名2个</li>
<li>月租$7.95</li>
</ul>
<ul>
	<strong>DreamHost</strong></p>
<li>500G空间（会逐渐增长，难道是Gmail……）</li>
<li>5000G流量（同样会增长）</li>
<li>可设置站点无限</li>
<li>数据库无限</li>
<li>免费赠送域名1个</li>
<li>月租$9.95（买10年的话$5.95，我吃饱了撑的啊）</li>
</ul>
<ul>
	<strong>GoDaddy</strong></p>
<li>100G空间</li>
<li>1000G流量</li>
<li>可设置站点无限</li>
<li>数据库25个</li>
<li>无免费赠送域名</li>
<li>月租$6.64</li>
</ul>
<ul>
	<strong>IPowerWeb</strong></p>
<li>1500G空间</li>
<li>15000G流量</li>
<li>可设置站点25个</li>
<li>数据库25个</li>
<li>免费赠送域名1个</li>
<li>月租$7.95（冬季特惠$4.95）</li>
</ul>
<p>　　从各方面看来，HostGator似乎比较专业，但较贵；IXWebHosting性价比最高，提供的服务最厉害，但是有传言说它一方面稳定性不高，二方面看似什么都不限制，实际上用到一定限度还是会想方设法找你茬的；DreamHost国内评价较差，是因为国内用户买得太多了吧；GoDaddy据说是著名的老牌主机商，但正因为太著名了，大部分IP都被篱笆挡掉了；IPowerWeb中规中矩，似乎国内用户用得很少，但是国际上综合评价颇高。<br />
　　这时候<a href="http://www.dlzm.net">DlzM</a>开始联系这几家的客服，了解一下服务情况。我们发现IPowerWeb由于最近刚提升到现在的容量和流量，所以开启了冬季促销活动，第一年每个月只要$4.95；我们联系了IXWebHosting，向它的客服要一点用于测试速度的站点，但是他不给，说我们有无条件退款政策（也就是说让我们先买了用用看），对这个客服失去信心了。<br />
　　但最可笑的是，我们最后买了一个客服完全不理我们的空间。<a href="http://www.ipowerweb.com/wintersale.html">IPowerWeb的冬季促销</a>看起来很诱人，我们正在犹豫，当我关闭窗口的时候突然跳出来一个对话框（模仿MSN聊天界面），说你别走，我给你再优惠一点怎样，每个月$3.95如何？我晕，难道这是小商品市场买袜子么……但是这招还不错，我们决定既然这么便宜，就买吧……<br />
　　DlzM发信去问这个优惠到底是怎么回事（突然弹出一个窗口你信啊），结果一直没有人回信，我们也等不及了，干脆就买下来。买的时候是27号中午，我当时估计要等我们的夜里他们上班了才能开通吧，结果5分钟之后DlzM发消息过来说，已经能用了……</p>
<p>　　千挑万选了好久，结果选了个自助式小商品市场！</p>


<p>Related posts:<ol><li><a href='http://blog.williamgates.biz/2009/11/reload/' rel='bookmark' title='Permanent Link: Reload'>Reload</a></li>
<li><a href='http://blog.williamgates.biz/2009/12/20091204/' rel='bookmark' title='Permanent Link: 随笔-20091204'>随笔-20091204</a></li>
<li><a href='http://blog.williamgates.biz/2009/05/better-than-i-think/' rel='bookmark' title='Permanent Link: 好于预期'>好于预期</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.williamgates.biz/2008/01/goodbye-icp-records-02/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
