<?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>为IT服务 [龙飞的博客] &#187; 软件相关</title>
	<atom:link href="http://226617.cn/archives/category/just-technology/about-software/feed" rel="self" type="application/rss+xml" />
	<link>http://226617.cn</link>
	<description>什么都略懂一点，生活就多彩一些</description>
	<lastBuildDate>Sun, 08 Jan 2012 15:58:02 +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>Varnish 3.0的vcl处理流程图</title>
		<link>http://226617.cn/archives/915.htm</link>
		<comments>http://226617.cn/archives/915.htm#comments</comments>
		<pubDate>Tue, 27 Sep 2011 01:16:47 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[只谈技术]]></category>
		<category><![CDATA[软件相关]]></category>
		<category><![CDATA[varnish]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=915</guid>
		<description><![CDATA[最近在尝试的用varnish，资料太少，偶然看见一个vcl的处理流程图，哪来分享下 另外可以安装个  GraphViz 用以下命令可以导出你所用版本的 ### for postscript output $ sed -n &#8216;/^DOT/s///p&#8217; varnish-... ]]></description>
			<content:encoded><![CDATA[<p>最近在尝试的用varnish，资料太少，偶然看见一个vcl的处理流程图，哪来分享下</p>
<div>另外可以安装个 <a href="http://www.graphviz.org/"> GraphViz</a> 用以下命令可以导出你所用版本的</div>
<blockquote>
<div>### for postscript output</div>
<div>$ sed -n &#8216;/^DOT/s///p&#8217; varnish-cache/bin/varnishd/cache_center.c | dot -Tps &gt; /tmp/varnish-flow.ps</div>
<div>### for pdf output</div>
<div>$ sed -n &#8216;/^DOT/s///p&#8217; varnish-cache/bin/varnishd/cache_center.c | dot -Tpdf &gt; /tmp/varnish-flow.pdf</div>
</blockquote>
<p><a class="highslide-image" onclick="return hs.expand(this, {captionId:'caption_1317086528919'});" href="http://226617.cn/wp-content/uploads/2011/09/varnish-flow.png"><img title="Click to enlarge" src="http://226617.cn/wp-content/uploads/2011/09/varnish-flow-506x1024.png" alt="image" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/915.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决编码为gb2312页面ajax交互汉字乱码的问题</title>
		<link>http://226617.cn/archives/876.htm</link>
		<comments>http://226617.cn/archives/876.htm#comments</comments>
		<pubDate>Tue, 25 Jan 2011 02:44:47 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[php相关]]></category>
		<category><![CDATA[软件相关]]></category>
		<category><![CDATA[ajax]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=876</guid>
		<description><![CDATA[ajax只支持utf-8格式，不能支持gb2312编码格式，所以经常遇到gb2312的编码的程序使用ajax就出现乱码，刚找到一种解决方案是： 服务器端传送的数据仍是gb2312编码，客户端用js将汉字转变成utf8编码... ]]></description>
			<content:encoded><![CDATA[<p>ajax只支持utf-8格式，不能支持gb2312编码格式，所以经常遇到gb2312的编码的程序使用ajax就出现乱码，刚找到一种解决方案是：</p>
<p>服务器端传送的数据仍是gb2312编码，客户端用js将汉字转变成utf8编码显示在页面</p>
<p>search.php</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-type: text/html; charset=gb2312&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">include</span> <span style="color: #0000ff;">'./search.htm'</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>search.htm</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot; /&gt;
&lt;title&gt;高级搜索&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h3&gt;高级搜索&lt;/h3&gt;
&lt;form method=&quot;post&quot; action=&quot;&quot;&gt;
  学校类型:
  &lt;select name=&quot;schooltype&quot;&gt;
    &lt;option value=&quot;&quot;&gt;全部&lt;/option&gt;
    &lt;option value=&quot;1&quot;&gt;小学&lt;/option&gt;
    &lt;option value=&quot;2&quot;&gt;初中&lt;/option&gt;
  &lt;/select&gt;
  学校名称:
  &lt;select name=&quot;sid&quot; id=&quot;sid&quot;&gt;
    &lt;option value=&quot;&quot;&gt;请选择学校&lt;/option&gt;
  &lt;/select&gt;
&lt;/form&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function ajax(settings) {
    var XHR = window.ActiveXObject ? new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;) : new XMLHttpRequest(), successed = false;
    XHR.open(settings.type, settings.url);
    if(settings.type == 'post')
     XHR.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    XHR.send((!settings.cache ? 'time=' + new Date().getTime() + '&amp;' : '') + settings.data);
    settings.loader();
    setTimeout(function() {
        if(!successed) {
            alert('Resquest timeout!');
            XHR.abort();
        }
    }, settings.timeout);
    XHR.onreadystatechange = function() {
        if (XHR.readyState == 4 &amp;&amp; XHR.status == 200) {
            settings.callback(XHR.responseText.replace(/(^\s*)|(\s*$)/g, &quot;&quot;));
        }
        successed = true;
    }
}
function a(t) {
ajax({
  type: 'post',
  url: 'ajax.php',
  data: 'schooltype=' + t,
  timeout: 8000,
  cache: true,
  loader: function() {},
  callback: function(d) {
   var arr = eval(d);
   if(typeof(arr) == 'object') {
    var obj, option;
    document.getElementById('sid').innerHTML = '';
    for(var i = 0; obj = arr; i ++) {
     option = document.createElement('option');
     option.value = obj[0];
     option.innerHTML = txt2utf8(obj[1], '&amp;#');
     document.getElementById('sid').appendChild(option);
    }
   }
  }
})
}
function txt2utf8(string, prefix){
    for(var i=0,utf8=[];i&lt;string.length;utf8.push((prefix||'\\u')+string.charCodeAt(i++)));
    return utf8.join('');
}
a(0);
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>ajax.php</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-type: text/html; charset=gb2312&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$schooltype</span> <span style="color: #339933;">=</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'schooltype'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'schooltype'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$schooltype</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;[['40', '太平溪镇花栗包完全小学'],['41', '太平溪镇长岭黑龙江希望小学'],['42', '乐天溪镇初级中学'],['43', '乐天溪镇莲沱初级中学']]&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;[['40', '太平溪镇花栗包完全小学'],['41', '太平溪镇长岭黑龙江希望小学']]&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;[['42', '乐天溪镇初级中学'],['43', '乐天溪镇莲沱初级中学']]&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>这个提到的方案有：<br />
一，服务器端json数据用php的iconv函数转换：iconv(&#8216;GB2312&#8242;, &#8216;UTF8&#8242;, &#8220;被转换字符串，输出到浏览器&#8221;);<br />
      客户端获取UTF8数据，再转成gb2312：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> gb2utf8<span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">//GB编码是，ie通过二进制码utf8-&gt;gbk转为中文  </span>
     <span style="color: #003366; font-weight: bold;">var</span> glbEncode <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>  
     gb2utf8_data <span style="color: #339933;">=</span> data<span style="color: #339933;">;</span>  
     execScript<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;gb2utf8_data = MidB(gb2utf8_data, 1)&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;VBScript&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
     <span style="color: #003366; font-weight: bold;">var</span> t<span style="color: #339933;">=</span>escape<span style="color: #009900;">&#40;</span>gb2utf8_data<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/%u/g</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span>.<span style="color: #009900;">&#123;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>.<span style="color: #009900;">&#123;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>g<span style="color: #339933;">|&gt;,</span><span style="color: #3366CC;">&quot;%$2%$1&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">/%</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>A<span style="color: #339933;">-</span>Z<span style="color: #009900;">&#93;</span>.<span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span><span style="color: #009900;">&#40;</span>.<span style="color: #009900;">&#123;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>g<span style="color: #339933;">|&gt;,</span><span style="color: #3366CC;">&quot;@$1$2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
     t<span style="color: #339933;">=</span>t.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;@&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
     <span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>j<span style="color: #339933;">=</span>t.<span style="color: #660066;">length</span><span style="color: #339933;">,</span>k<span style="color: #339933;">;</span>  
     <span style="color: #000066; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">++</span>i<span style="color: #339933;">&lt;</span>j<span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span>  
         k<span style="color: #339933;">=</span>t.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
         <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>glbEncode<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
             gb2utf8_char <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">eval</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;0x&quot;</span><span style="color: #339933;">+</span>k<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
             execScript<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;gb2utf8_char = Chr(gb2utf8_char)&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;VBScript&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
             glbEncode<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span>escape<span style="color: #009900;">&#40;</span>gb2utf8_char<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><span style="color: #CC0000;">6</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
         <span style="color: #009900;">&#125;</span>  
         t<span style="color: #339933;">=</span>glbEncode<span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span>t.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
     <span style="color: #009900;">&#125;</span>  
     gb2utf8_data <span style="color: #339933;">=</span> gb2utf8_char <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>  
     <span style="color: #000066; font-weight: bold;">return</span> unescape<span style="color: #009900;">&#40;</span>t.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;%&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>二，header(&#8220;Content-type&#8221;, &#8220;application/x-www-form-urlencoded; charset=GBK&#8221;); //输出头标，设置为GBK编码</p>
<p>三，在ajax请求数据前调用上面的方法指定请求使用的字符集:xmlHttp.setRequestHeader( &#8220;Content-Type&#8221;, &#8220;application/x-www-form-urlencoded;charset=gbk&#8221;);</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/876.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>防盗链技术终极解决方案</title>
		<link>http://226617.cn/archives/872.htm</link>
		<comments>http://226617.cn/archives/872.htm#comments</comments>
		<pubDate>Tue, 21 Dec 2010 02:50:49 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[只谈技术]]></category>
		<category><![CDATA[软件相关]]></category>
		<category><![CDATA[Squid]]></category>
		<category><![CDATA[防盗链]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=872</guid>
		<description><![CDATA[防盗链技术现状： 1、通过识别Referer确认请求来源页面 2、Apache，squid等都能对Referer进行识别 3、通过ActiveX显示的内容不向服务器提供Referer Header（例如，Flash，WindowsMedia视频等） 4、流媒体的RTS... ]]></description>
			<content:encoded><![CDATA[<p>防盗链技术现状：<br />
    1、通过识别Referer确认请求来源页面<br />
    2、Apache，squid等都能对Referer进行识别<br />
    3、通过ActiveX显示的内容不向服务器提供Referer Header（例如，Flash，WindowsMedia视频等）<br />
    4、流媒体的RTSP协议也不向服务器提供Referer Header<br />
    5、通过服务器端程序代码实现</p>
<p>防盗链应用现状：<br />
    1、对图片、HTML等可以实现防盗链<br />
    2、无法对Flash，WindowsMedia视频（MMS，RTSP）实现防盗链<br />
    3、服务器端程序代码实现的防盗链无法通过CDN加速</p>
<p>对于Flash，WindowsMedia视频这种占用流量较大的服务无法实现防盗链，对一个依靠这类内容作为盈利点的网站来说是非常头疼的，俺通过一些研究以及测试实现了采用Cookie技术的防盗链解决方案，完美的解决了对Flash，WindowsMedia视频的防盗链。</p>
<p>首先发现虽然ActiveX插件不传递Referer，但是却忠实的传递Cookie。于是在显示ActiveX的页面的<head> </head>标签内嵌入一段代码：<br />
<script> document.cookie="Cache=vod;domain=domain.com;path=/"; </script></p>
<p>这段代码用 javascript 设置了一段 Cookie: Cache=vod</p>
<p>然后通过各种ACL来判断这个Cookie的存在以及验证其值的操作了</p>
<p>Squid:<br />
    建立脚本 /usr/local/squid/libexec/squid_cookie.pl<br />
&#8212;&#8212;&#8212;&#8211;<br />
#!/usr/bin/perl -w<br />
# programmed by oknet http://blog.sina.com.cn/m/oknet<br />
# 这个脚本仅仅是验证了Cache这个cookie的存在，没有严格的校验其值。<br />
# This is the cookie to check for.<br />
$COOKIE=&#8221;Cache=&#8221;;<br />
# disable output buffering<br />
$|=1;<br />
# cookie matches?<br />
while (<STDIN>) {<br />
         chop;<br />
         $cookie=$_;<br />
         if( $cookie =~ /$COOKIE/i) {<br />
                 print &#8220;OK\n&#8221;;<br />
         } else { print &#8220;ERR\n&#8221;; }<br />
}<br />
&#8212;&#8212;&#8212;&#8211;<br />
    然后在squid.conf添加：<br />
external_acl_type download children=15 %{Cookie} /usr/local/squid/libexec/squid_cookie.pl<br />
acl dl external download<br />
    然后选择需要进行防盗链的文件类型：<br />
acl filetype url_regex -i \.wmv<br />
acl filetype url_regex -i \.wma<br />
acl filetype url_regex -i \.asf<br />
acl filetype url_regex -i \.asx<br />
acl filetype url_regex -i \.avi<br />
acl filetype url_regex -i \.mp3<br />
acl filetype url_regex -i \.smi<br />
acl filetype url_regex -i \.rm<br />
acl filetype url_regex -i \.ram<br />
acl filetype url_regex -i \.rmvb<br />
acl filetype url_regex -i \.swf<br />
acl filetype url_regex -i \.mpg<br />
acl filetype url_regex -i \.mpeg<br />
acl filetype url_regex -i \.mov<br />
acl filetype url_regex -i \.zip<br />
acl filetype url_regex -i \.mid<br />
    如果仅仅只是禁止用户访问的话，就没意思了，要让盗链者帮我们宣传我们的网站，特别是发现盗链比较多的时候，这个时候，可以让任何盗链的网站帮我们免费宣传~~~那就是把盗链的url重定向到我们的网站宣传页~~<br />
    建立脚本：/usr/local/squid/libexec/squid_redir.pl<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
#!/usr/bin/perl -T -w<br />
#<br />
# rredir.pl<br />
#<br />
# Author: Peter Eisenhauer
<pe@pipetronix.de>
# First Version: 26. May 1997<br />
# Modified by oknet http://blog.sina.com.cn/m/oknet<br />
#<br />
# Description: Direct all request to files who are in a local dir to<br />
# this directory<br />
#<br />
use File::Basename;<br />
use URI::URL;<br />
# flush after every print<br />
$| = 1;<br />
# Process lines of the form &#8216;URL ip-address/fqdn ident method&#8217;<br />
# See release notes of Squid 1.1 for details<br />
while ( <> ) {<br />
    $r302=0;<br />
    ($url, $addr, $fqdn, $ident, $method) = m:(\S*) (\S*)/(\S*) (\S*) (\S*):;<br />
    $url = url $url;<br />
    $host = lc($url->host);<br />
    if ( $host !~ /\./ ) {<br />
        next;<br />
    }<br />
    if ( $host =~ /vod\.domain\.com/ ) {<br />
        $url->path(&#8220;/ad.wmv&#8221;);<br />
        $r302=1;<br />
    }<br />
} continue {<br />
    if ( $r302 ) {<br />
        print &#8220;302:$url\n&#8221;;<br />
    } else {<br />
        print &#8220;$url $addr/$fqdn $ident $method\n&#8221;;<br />
    }<br />
}<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
    然后在squid.conf添加：<br />
redirect_program /usr/local/squid/libexec/squid_redir.pl<br />
redirect_children 5<br />
acl superurl url_regex -i ^http://vod\.domain\.com/tom\.wmv$<br />
redirector_access deny superurl<br />
redirector_access allow filetype !dl<br />
redirector_access deny all<br />
    设置superurl是因为宣传我们自己站点的视频是不做防盗链的，这样才能起到宣传的作用。现在大功告成啦！网站的流量大幅增加~~~PV是原来的三倍，Oh，Yeah~</p>
<p>    WMS视频的MMS协议由于不是明文，无法实现防盗链，但是RTSP协议基本就是HTTP协议的变种，可以在BIGIP等可以进行Layer 7处理数据的设备上实现对Cookie的校验。但是WMS视频防盗链要禁止MMS协议，因为MMS协议不是明文，无法进行cookies的识别。但是可以在HTTP，RTSP上进行识别，WMS V9都是支持HTTP，RTSP的。下面是用于BIGIP的防盗链iRule:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
if (http_uri matches_regex &#8220;vod.domain.com&#8221;) {<br />
   if (http_cookie(&#8220;Cache&#8221;) == &#8220;vod&#8221;) {<br />
      use pool vod-rtsp<br />
   }<br />
   else {<br />
      discard<br />
   }<br />
}<br />
else {<br />
   use pool vod-rtsp<br />
}<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
    其他的系统可以参考以上的规则。<br />
    采用Cookie的防盗链方式对于大多数的系统都可以轻易实现，Cookie一般都是用来传递认证信息，相信不会出现不传递的状况。</p>
<p>转自：http://blog.sina.com.cn/s/blog_544465b00100034a.html</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/872.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pureftpd如何刷新用户目录已使用的总容量</title>
		<link>http://226617.cn/archives/868.htm</link>
		<comments>http://226617.cn/archives/868.htm#comments</comments>
		<pubDate>Wed, 08 Sep 2010 02:36:38 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[linux相关]]></category>
		<category><![CDATA[软件相关]]></category>
		<category><![CDATA[pureftpd]]></category>
		<category><![CDATA[quota]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=868</guid>
		<description><![CDATA[今天一个部门打电话来说文件传不上ftp，看了下提示是空间满了，结果扫描了下实际容量似乎没满，感觉是quota的识别容量错了。 说实话这pureftpd用的还很少在安装目录里面逛了圈发现了pure-quot... ]]></description>
			<content:encoded><![CDATA[<p>今天一个部门打电话来说文件传不上ftp，看了下提示是空间满了，结果扫描了下实际容量似乎没满，感觉是quota的识别容量错了。<br />
说实话这pureftpd用的还很少在安装目录里面逛了圈发现了pure-quotacheck这个命令，应该就是了。<br />
试了试使用格式如下：<br />
/usr/local/pureftpd/sbin/pure-quotacheck -u www -d /www/aaa.com</p>
<p>-u 是你指定pure-quotacheck运行时以系统的什么用户去扫描<br />
-d 就是你ftp站点的目录</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/868.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>克隆VirtualBox的虚拟机</title>
		<link>http://226617.cn/archives/820.htm</link>
		<comments>http://226617.cn/archives/820.htm#comments</comments>
		<pubDate>Mon, 25 Jan 2010 14:54:56 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[只谈技术]]></category>
		<category><![CDATA[软件相关]]></category>
		<category><![CDATA[vdi]]></category>
		<category><![CDATA[VirtualBox]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=820</guid>
		<description><![CDATA[VirtualBox的虚拟机克隆主要就是克隆一份vdi文件，今天在克隆一台VirtualBox的虚拟机时以为和vmware那样复制粘贴注册vdi的时候会提示copy it之类的，没想到直接报错uuid重复注册。翻了下帮助原来Virt... ]]></description>
			<content:encoded><![CDATA[<p>VirtualBox的虚拟机克隆主要就是克隆一份vdi文件，今天在克隆一台VirtualBox的虚拟机时以为和vmware那样复制粘贴注册vdi的时候会提示copy it之类的，没想到直接报错uuid重复注册。翻了下帮助原来VirtualBox有转码的工具来进行vdi克隆。<br />
在VirtualBox的安装目录下有个 VBoxManage.exe 其实这工具有蛮多功能，有兴趣的同学可以自己看看帮助。我们这里就说下如何克隆vdi了：<br />
VBoxManage.exe clonevdi 原始VDI文件名 新的VDI文件名<br />
其实蛮方便的一个工具想不懂为啥不做成图形的非得要敲命令呢，用户体验真差。</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/820.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EditPlus正则替换一例</title>
		<link>http://226617.cn/archives/812.htm</link>
		<comments>http://226617.cn/archives/812.htm#comments</comments>
		<pubDate>Wed, 18 Nov 2009 07:59:59 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[只谈技术]]></category>
		<category><![CDATA[软件相关]]></category>
		<category><![CDATA[EditPlus]]></category>
		<category><![CDATA[正则表达式]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=812</guid>
		<description><![CDATA[有个mysql的查询 用的 where xxx in ('a','b','c','d')，现在有一批数据需要放入in () 来查询，在想如何批量转换成'a','b','c','d' 这样的格式。 首先我把数据处理成每行1个的格式： a b c d 这样 通过EditPlus... ]]></description>
			<content:encoded><![CDATA[<p><code>有个mysql的查询 用的 where xxx in ('a','b','c','d')，现在有一批数据需要放入in () 来查询，在想如何批量转换成'a','b','c','d' 这样的格式。<br />
首先我把数据处理成每行1个的格式：<br />
a<br />
b<br />
c<br />
d<br />
这样<br />
通过EditPlus的正则替换功能，查找^.* 替换为 '\0' 得到<br />
'a'<br />
'b'<br />
'c'<br />
'd'<br />
然后在通过正则替换，查找 \n 替换为 , 就得到了<br />
'a','b','c','d'<br />
达到目标</code></p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/812.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从根服务器查询域名的ns记录</title>
		<link>http://226617.cn/archives/786.htm</link>
		<comments>http://226617.cn/archives/786.htm#comments</comments>
		<pubDate>Tue, 22 Sep 2009 16:01:18 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[软件相关]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[nslookup]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=786</guid>
		<description><![CDATA[有时候更新域名的域名服务器，需要查看是否生效，只能通过根服务器的NS查询来辨别。可以使用下面的命令 nslookup -qt=ns thmz.com a.gtld-servers.net 如果根服务器已经更新的话再对比运营商的dns看看... ]]></description>
			<content:encoded><![CDATA[<p>有时候更新域名的域名服务器，需要查看是否生效，只能通过根服务器的NS查询来辨别。可以使用下面的命令<br />
nslookup -qt=ns thmz.com a.gtld-servers.net<br />
如果根服务器已经更新的话再对比运营商的dns看看有没有更新<br />
nslookup -qt=ns thmz.com</p>
<p>再或者 nslookup -d thmz.com 自己看看各个节点的过期时间</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/786.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bind的top，dnstop安装使用教程</title>
		<link>http://226617.cn/archives/782.htm</link>
		<comments>http://226617.cn/archives/782.htm#comments</comments>
		<pubDate>Tue, 22 Sep 2009 15:08:39 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[linux相关]]></category>
		<category><![CDATA[软件相关]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[dnstop]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=782</guid>
		<description><![CDATA[安装这里以centos为例 yum install libpcap libpcap-devel ncurses-devel ncurses wget http://dns.measurement-factory.com/tools/dnstop/src/dnstop-20090128.tar.gz tar zxvf dnstop-20090128.tar.gz cd dnstop-20090128 ./configure make &#038;&#038; make inst... ]]></description>
			<content:encoded><![CDATA[<p>安装这里以centos为例</p>
<p>yum install libpcap libpcap-devel ncurses-devel ncurses<br />
wget http://dns.measurement-factory.com/tools/dnstop/src/dnstop-20090128.tar.gz<br />
tar zxvf dnstop-20090128.tar.gz<br />
cd dnstop-20090128<br />
./configure<br />
make &#038;&#038; make install</p>
<p>使用方法很简单 dnstop eth0<br />
输入? 可以看到详细帮助，这里不多介绍了。</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/782.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>关于discuz 7.0用户最后发表时间更新bug</title>
		<link>http://226617.cn/archives/769.htm</link>
		<comments>http://226617.cn/archives/769.htm#comments</comments>
		<pubDate>Fri, 11 Sep 2009 14:24:30 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[软件相关]]></category>
		<category><![CDATA[7.0]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[discuz]]></category>
		<category><![CDATA[dz7]]></category>
		<category><![CDATA[lastpost]]></category>
		<category><![CDATA[最后发表]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=769</guid>
		<description><![CDATA[最近论坛在搞抢楼，有用户被判定一分钟发了50贴是机器灌水行为，我好想觉得后台设置过发帖时间限制为10秒的，也就是说1分钟最多发6贴。就自己研究了下，发现自从升级到dz7以来用户的最... ]]></description>
			<content:encoded><![CDATA[<p>最近论坛在搞抢楼，有用户被判定一分钟发了50贴是机器灌水行为，我好想觉得后台设置过发帖时间限制为10秒的，也就是说1分钟最多发6贴。就自己研究了下，发现自从升级到dz7以来用户的最后更新时间就没更新过，而发帖限制是靠 现在时间-发帖限制时间 和 最后发表时间去比对的，所以导致发帖时间限制的设置形同虚设。所以又仔细看了下更新用户最后发表时间相关代码。<br />
首先来看一段源代码代码</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$creditnotice</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$uidarray</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$discuz_uid</span><span style="color: #339933;">;</span>
……
<span style="color: #000088;">$lastpostadd</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$self</span> ? <span style="color: #0000ff;">&quot;, lastpost='<span style="color: #006699; font-weight: bold;">$timestamp</span>'&quot;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
……
……
<span style="color: #000088;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UPDATE <span style="color: #006699; font-weight: bold;">{$tablepre}</span>members SET posts=posts+('<span style="color: #006699; font-weight: bold;">$operator</span><span style="color: #006699; font-weight: bold;">$posts</span>') <span style="color: #006699; font-weight: bold;">$lastpostadd</span> <span style="color: #006699; font-weight: bold;">$creditsadd2</span> WHERE uid IN (<span style="color: #006699; font-weight: bold;">$uids</span>)&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'UNBUFFERED'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>这里看到要 $self=1 才会把更新最后发表时间的 lastpost=&#8217;$timestamp&#8217; 加到update的sql里面，而$self=1的话除了判断下uid之外的话还有个参数 $creditnotice 必需也等于1才行。<br />
也就是必须要打开 dz7 后台 界面 全局里面的积分变动提示才会更新用户最后发表时间。</p>
<p>我想这应该算是个bug把</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/769.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phpcws 升级到httpcws</title>
		<link>http://226617.cn/archives/761.htm</link>
		<comments>http://226617.cn/archives/761.htm#comments</comments>
		<pubDate>Tue, 08 Sep 2009 15:22:58 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[软件相关]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=761</guid>
		<description><![CDATA[非常好的一个分词系统，这下有进行了根本性结构的改变，更加适合互联网系统使用。强烈推荐，http://blog.s135.com/httpcws_v100... ]]></description>
			<content:encoded><![CDATA[<p>非常好的一个分词系统，这下有进行了根本性结构的改变，更加适合互联网系统使用。强烈推荐，<a href="http://blog.s135.com/httpcws_v100/">http://blog.s135.com/httpcws_v100/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/761.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phpmaker数据库中文乱码问题解决</title>
		<link>http://226617.cn/archives/753.htm</link>
		<comments>http://226617.cn/archives/753.htm#comments</comments>
		<pubDate>Sat, 05 Sep 2009 06:16:54 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[软件相关]]></category>
		<category><![CDATA[phpmaker]]></category>
		<category><![CDATA[乱码]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=753</guid>
		<description><![CDATA[今天在做个小东西，顺便熟悉熟悉phpmaker，结果发现问题了，数据库里面只要是中文的内容 在生成的php来看都是乱码，看了看生成的php，发现压根没声明编码。 搜索mysql_query 在找出的语句上面... ]]></description>
			<content:encoded><![CDATA[<p>今天在做个小东西，顺便熟悉熟悉phpmaker，结果发现问题了，数据库里面只要是中文的内容 在生成的php来看都是乱码，看了看生成的php，发现压根没声明编码。<br />
搜索mysql_query  在找出的语句上面一行加上mysql_query(&#8220;set names gbk&#8221;);搞定。<br />
想不通这软件都做这么强大了，竟然连数据库编码都没考虑</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/753.htm/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>用phpcws的请注意更新到1.0.1原来的过期了</title>
		<link>http://226617.cn/archives/639.htm</link>
		<comments>http://226617.cn/archives/639.htm#comments</comments>
		<pubDate>Wed, 08 Jul 2009 14:58:37 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[软件相关]]></category>
		<category><![CDATA[phpcws]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=639</guid>
		<description><![CDATA[犹豫phpcws使用的分词组件是ICTCLAS的共享版，原来的于7.6过期了，所以会造成函数结果输出是空白，只要把phpcws更新下就能恢复正常了... ]]></description>
			<content:encoded><![CDATA[<p>犹豫phpcws使用的分词组件是ICTCLAS的共享版，原来的于7.6过期了，所以会造成函数结果输出是空白，只要把phpcws更新下就能恢复正常了。</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/639.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>自动升级WordPress插件超时Operation timed out after 30</title>
		<link>http://226617.cn/archives/634.htm</link>
		<comments>http://226617.cn/archives/634.htm#comments</comments>
		<pubDate>Tue, 02 Jun 2009 04:45:46 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[软件相关]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=634</guid>
		<description><![CDATA[默认情况下WordPress插件自动升级时候的超时是30秒，但是往往服务器网速的原因30秒没无法下载完成新的插件安装包导致提示超时： 正在从 http://downloads.wordpress.org/plugin/super-switch.1.3.zip 下载更新... ]]></description>
			<content:encoded><![CDATA[<p>默认情况下WordPress插件自动升级时候的超时是30秒，但是往往服务器网速的原因30秒没无法下载完成新的插件安装包导致提示超时：</p>
<p>正在从 http://downloads.wordpress.org/plugin/super-switch.1.3.zip 下载更新</p>
<p>下载失败。: Operation timed out after 30 seconds with 182448 bytes received</p>
<p>插件升级失败</p>
<p>要解决这个问题可以修改 wp-admin/includes/file.php</p>
<p>把$response = wp_remote_get($url, array(’timeout’ => 30));</p>
<p>30改成300 或 600 后再次自动升级成功了</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/634.htm/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IE8下utf8页面调用JavaScript的编码bug</title>
		<link>http://226617.cn/archives/534.htm</link>
		<comments>http://226617.cn/archives/534.htm#comments</comments>
		<pubDate>Thu, 02 Apr 2009 02:42:43 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[软件相关]]></category>
		<category><![CDATA[ie8]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=534</guid>
		<description><![CDATA[情况是这样的，在升级ie8之后查看网页发现有2块乱码，看了看源代码，发现是调用的JavaScript &#60;script language=&#8221;javascript&#8221; type=&#8221;text/javascript&#8221; src=&#8221;http://www.abc.com/api/javascript.php?k... ]]></description>
			<content:encoded><![CDATA[<p>情况是这样的，在升级ie8之后查看网页发现有2块乱码，看了看源代码，发现是调用的JavaScript</p>
<p>&lt;script language=&#8221;javascript&#8221; type=&#8221;text/javascript&#8221; src=&#8221;http://www.abc.com/api/javascript.php?key=bbs_jinpai&#8221; charset=&#8221;utf-8&#8243;&gt;&lt;/script&gt;</p>
<p>2个乱码区块都是以charset=&#8221;utf-8&#8243;方式调用的，查看了数据源，又发现这2个区块原本都是gb2312编码然后iconv转换到utf8的，于是改为不转换，仍然以gb2312输出，然后ie8以charset=&#8221;utf-8&#8243;方式调用竟然显示正常，不过其它浏览器就乱码了。最终跳过iconv以gb2312输出然后用charset=&#8221;gb2312&#8243;调用都正常了。</p>
<p>总结：如果输出是gb2312然后转换成utf8方式的js，在ie8下面以charset=&#8221;utf-8&#8243;调用是乱码，只有原生输出是utf8的才正常。应该是个bug</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/534.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>discuz论坛wap浏览无中文解决方法</title>
		<link>http://226617.cn/archives/422.htm</link>
		<comments>http://226617.cn/archives/422.htm#comments</comments>
		<pubDate>Tue, 17 Feb 2009 15:31:18 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[php相关]]></category>
		<category><![CDATA[软件相关]]></category>
		<category><![CDATA[discuz]]></category>
		<category><![CDATA[wap]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=422</guid>
		<description><![CDATA[一个兄弟网站的discuz论坛换了台新的服务器，从apache换到了nginx结果发现换了之后wap访问论坛出来的页面没有任何中文字（英文还是存在的）。我在看了之后一开始以为是wap程序php取数据库编码... ]]></description>
			<content:encoded><![CDATA[<p>一个兄弟网站的discuz论坛换了台新的服务器，从apache换到了nginx结果发现换了之后wap访问论坛出来的页面没有任何中文字（英文还是存在的）。我在看了之后一开始以为是wap程序php取数据库编码的问题。后来做了几次修改尝试后发现并非数据库输出内容无中文，而且经过和我们的对比发现连普通的静态内容的中文也都是没有的，一下子就想到问题出在了php上面，于是安装wap下面原来的index.php输出方式手写了一个临时php调试，发现php输出都没问题，有乱码出现，看来问题出在编码转换上面。于是自己看了下discuz的编码转码的库文件chinese.class.php，发现这台新服务器是启用iconv函数的，里面检测到了iconv然后使用iconv函数进行编码转换，忽然想到可能是系统iconv函数库的问题。于是找的了判断iconv的代码：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td 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;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'iconv'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TargetLang'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">'BIG5'</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #000088;">$ForceTable</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">iconv_enabled</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</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: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">iconv_enabled</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">OpenTable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">......</span></pre></td></tr></table></div>

<p>修改了这段代码绕过了iconv检测，强制设为不存在iconv的方式处理编码转换。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">iconv_enabled</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">OpenTable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>然后测试果然中文又回来了。</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/422.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PsTools系统命令行增强工具命令参数详解</title>
		<link>http://226617.cn/archives/416.htm</link>
		<comments>http://226617.cn/archives/416.htm#comments</comments>
		<pubDate>Thu, 05 Feb 2009 14:11:14 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[windows相关]]></category>
		<category><![CDATA[软件相关]]></category>
		<category><![CDATA[PsTools]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=416</guid>
		<description><![CDATA[PsTools是微软收购的Sysinternals小组的一个命令行的win系统命令行管理工具目前最新版本是2.44 下载pstools，由于某些原因无法进行图形远程管理服务器的时候，PsTools就能大显身手了。 PsTools 套件中... ]]></description>
			<content:encoded><![CDATA[<p>PsTools是微软收购的Sysinternals小组的一个命令行的win系统命令行管理工具目前最新版本是2.44 <a href='http://226617.cn/wp-content/uploads/2009/02/pstools.zip'>下载pstools</a>，由于某些原因无法进行图形远程管理服务器的时候，PsTools就能大显身手了。</p>
<p>PsTools 套件中包含以下工具：<br />
PsExec &#8211; 远程执行进程<br />
PsFile &#8211; 显示远程打开的文件<br />
PsGetSid &#8211; 显示计算机或用户的 SID<br />
PsInfo &#8211; 列出有关系统的信息<br />
PsKill &#8211; 按名称或进程 ID 终止进程<br />
PsList &#8211; 列出有关进程的详细信息<br />
PsLoggedOn &#8211; 查看在本地通过资源共享（包含所有资源）登录的用户<br />
PsLogList &#8211; 转储事件日志记录<br />
PsPasswd － 更改帐户密码<br />
PsService &#8211; 查看和控制服务<br />
PsShutdown &#8211; 关闭并重新启动（可选）计算机<br />
PsSuspend &#8211; 暂停进程<br />
PsUptime &#8211; 向您显示系统自上次重新启动以来的运行时间（PsUptime 的功能已集成到 PsInfo 中）</p>
<p>使用方法:<br />
将所有工具复制到windows目录下CMD命令界面键入工具名称,然后输入命令行参数即可。不想复制到windows目录的朋友，就要<br />
键入工具所在的完整的路径,然后输入命令行参数。要显示完整的用法信息，请指定“-”命令行选项。</p>
<p>工具命令参数详解：</p>
<p>1、psexec<br />
psexec是一个远程执行工具，你可以像使用telnet一样使用它。</p>
<p>它的使用格式为：</p>
<p>psexec \远程机器ip [-u username [-p password]] [-c [-f]] [-i][-d] program [arguments]<br />
它的参数有：<br />
-u后面跟用户名 -p后面是跟密码的,如果建立ipc连接后这两个参数则不需要。（如果没有-p参数，则输入命令后会要求你输入密码）<br />
-c &lt; [路径]文件名&gt;:拷贝文件到远程机器并运行（注意：运行结束后文件会自动删除）<br />
-d 不等待程序执行完就返回，（比如要让远程机器运行tftp服务端的时候使用，不然psexec命令会一直等待tftp程序结束才会返回）<br />
-i 在远程机器上运行一个名为psexesvc进程，(到底什么用弄不明白）<br />
假设我在远程机器ip有一个账号，账号名是：abc 密码是：123<br />
比如想要用telnet一样在远程系统上执行命令可以打：<br />
psexec \远程机器ip -u abc -p 123 cmd<br />
如果想要远程机器执行本地c:srm.exe文件可以打：<br />
psexec \远程机器ip -u abc -p 123 -c c:srm.exe<br />
如果想要让远程机器执行本地上tftp服务端，(假设tftp服务端在本地c:tftp32.exe)，可以打：<br />
psexec \远程机器ip -u abc -p 123 -c c:tftp32.exe -d<br />
（后面例子不再重复-u和-p的用法）</p>
<p>2、psservice<br />
psservice是一个服务管理程序。</p>
<p>它的使用格式为：</p>
<p>psservice [\远程机器ip [-u username] [-p password]]<br />
它的参数只有：<br />
-u 后面跟用户名 -p后面是跟密码的,如果建立ipc连接后这两个参数则不需要。（如果没有-p参数，则输入命令后会要求你输入密码）<br />
它的command有：<br />
query [服务名]:显示某一服务的状态，如不填服务名则显示所有服务的状态。<br />
config &lt; 服务名&gt;：显示某一服务的配置。<br />
start &lt; 服务名&gt;：启动某一服务。<br />
stop &lt; 服务名&gt;：停止某一服务。<br />
testart &lt; 服务名&gt;：停止某一服务并重新启动它。<br />
pause &lt; 服务名&gt;：暂停某一服务。<br />
cont &lt; 服务名&gt;：恢复暂停的服务。<br />
depend &lt; 服务名&gt;：显示某一服务依存关系。<br />
find &lt; 服务名&gt;：在网络种搜寻指定的服务。<br />
比如你想查看在远程机器上的telnet服务的状态可以打：<br />
psservice \远程机器ip query tlntsvr （tlntsvr为telnet服务的服务名）<br />
比如你查看远程机器上的telnet服务的配置可以打：<br />
psservice \远程机器ip config tlntsvr<br />
比如你想启动远程机器上的telnet服务可以打：<br />
psservice \远程机器ip start tlntsvr<br />
其他用法以此类推。</p>
<p>3、pssuspend<br />
pssuspend是一个暂时停止进程的软件</p>
<p>它的使用格式为：</p>
<p>pssuspend [-r] [\远程机器ip [-u username] [-p password]]<br />
它有三个参数：<br />
-u：后面跟用户名 -p：后面是跟密码的,如果建立ipc连接后这两个参数则不需要。（如果没有-p参数，则输入命令后会要求你输入密码）<br />
-r:恢复进程。<br />
比如要暂时停止一个pid号为999,名称为srm.exe的进程可以打：<br />
pssuspend \远程机器ip 999 或 pssuspend \远程机器ip srm<br />
如果想要恢复它就可以打pssuspend -r \远程机器ip 999 或 pssuspend -r \远程机器ip srm</p>
<p>4、psinfo<br />
psinfo是一个搜集机器软硬件信息的工具，它可以获得操作系统信息，硬件信息和软件信息。</p>
<p>它的使用格式为：</p>
<p>psinfo [-h] [-s] [-d] [-c] [\远程机器ip [-u username [-p password]]]<br />
它的参数有：<br />
-u：后面跟用户名 -p：后面是跟密码的,如果建立ipc连接后这两个参数则不需要。（如果没有-p参数，则输入命令后会要求你输入密码）<br />
-h：是显示它安装了哪些补丁包<br />
-s：是显示它装了哪些软件<br />
-d：是显示磁盘信息。<br />
比如我只想看远程机器的软硬件信息和只用打:<br />
psinfo \远程机器ip<br />
假如我还想看看它装了哪些补丁包可以打<br />
psinfo -h \远程机器ip<br />
假如我还想看看它磁盘信息可以打：<br />
psinfo -d \远程机器ip<br />
如果我想看它装了哪些软件可以打：<br />
psinfo -s \远程机器ip<br />
简单吧.</p>
<p>5、pslist<br />
pslist是一个查看进程的程序。</p>
<p>它的使用格式为：</p>
<p>pslist [-d] [-m] [-x][-t][-s [n] [-r n] [\远程机器ip [-u username] [-p password]] [name | pid]<br />
它的参数有：<br />
-u：后面跟用户名 -p：后面是跟密码的,如果建立ipc连接后这两个参数则不需要。（如果没有-p参数，则输入命令后会要求你输入密码）<br />
-s：是使用任务管理器模式实时查看进程，可以按ESC键退出。<br />
-r &lt; 秒数&gt;：是和-s连用的一个参数，它用来指定任务管理器模式是的刷新间隔。（默认的刷新间隔为1秒）<br />
-d：示各个进程的cpu使用信息。<br />
-m：显示各个进程的存储器使用信息。<br />
-x：非常详细显示进程的所有信息。<br />
-t：以树型方式显示进程。<br />
比如要查看远程机器ip上的进程的cpu使用信息可以打:<br />
pslist -d \远程机器ip<br />
比如要查看一个pid号为999,名称为srm.exe进程的存储器使用信息可以打：<br />
pslist -m \远程机器ip 999 或 pslist -m \远程机器ip srm<br />
比如要以任务管理器模式实时查看61.12.23.4上进程情况，并且刷新间隔为3秒可以打：<br />
pslist -s -n 3 \远程机器ip</p>
<p>6、psuptime<br />
psuptime是一个了解远程机器运行了多久的命令。</p>
<p>使用它只需要打：psuptime \远程机器ip</p>
<p>7、psshutdown<br />
psshutdown是一个远程关机命令。</p>
<p>它的使用格式为：</p>
<p>psshutdown [[-s | -r | -k [-t nn][-m "消息"][-f]] -a | -l | -o] [\远程机器ip]<br />
它的参数有：<br />
-a：取消以前执行的关机指令。<br />
-t：离关机还有多少秒。（默认是20秒）<br />
-s：关闭机器。<br />
-m：是要显示的信息。<br />
-f：是关机是不保存运行的程序。<br />
-r：表示重启。<br />
-l：表示锁定电脑。<br />
-o：表示注销用户。<br />
比如我想让远程机器30秒后关闭并显示(要关机了，请保存文件)则打：<br />
psshutdown -t 30 -s -m &#8220;要关机了，请保存文件&#8221; \远程机器ip<br />
如果是要重起的话打：<br />
psshutdown -t 30 -m &#8220;要关机了，请保存文件&#8221; -r \远程机器ip<br />
如果要取消刚才的指令可以打：<br />
psshutdown -a \远程机器ip<br />
其他参数以此类推。</p>
<p>8、psfile<br />
psfile是一个显示机器上的会话和有什么文件被网络中的用户的打开的命令。</p>
<p>它的使用格式为：</p>
<p>psfile [\远程机器ip [-u Username [-p Password]]] [[Id | path] [-c]]<br />
它的参数有:<br />
-u 后面跟用户名 -p后面是跟密码的,如果建立ipc连接后这两个参数则不需要。（如果没有-p参数，则输入命令后会要求你输入密码）<br />
-c：关闭会话或文件<br />
比如我想看看远程机器上的会话和被远程用户打开的文件可以打：<br />
psfile \远程机器ip<br />
接着就会显示<br />
[33] C:WINNT<br />
User: ADMINISTRATOR<br />
Locks: 0<br />
Access: Read<br />
[63] PIPEsrvsvc<br />
User: ADMINISTRATOR<br />
Locks: 0<br />
Access: Read Write<br />
接着我想关闭id为33，路径为c:winnt的这个会话可以打<br />
psfile \远程机器ip 33 -c 或 psfile \远程机器ip c:winnt -c</p>
<p>9、psloggedon</p>
<p>psloggedon是一个显示目前谁登陆的机器的命令。</p>
<p>它的参数只有:</p>
<p>-l只显示本地登陆用户而不显示其它的网络登陆用户<br />
-x不显示登陆时间<br />
比如说要显示远程机器现在登陆的用户可以打：<br />
psloggedon \远程机器ip</p>
<p>10、psgetsid<br />
psgetsid是一个远程获取账号sid信息的工具。</p>
<p>它的使用格式为：</p>
<p>psgetsid [\远程机器ip [-u username [-p password]]] [account]<br />
它的参数有<br />
-u 后面跟用户名 -p后面是跟密码的,如果建立ipc连接后这两个参数则不需要。（如果没有-p参数，则输入命令后会要求你输入密码）<br />
比如要看远程机器上账号名为abc的sid信息可以打：<br />
psgetsid \远程机器ip abc</p>
<p>11、pskill</p>
<p>pskill是一个杀除进程的程序。<br />
它的使用格式为：</p>
<p>pskill [\远程机器ip [-u username] [-p password]] 比如要杀除一个pid号为999,名称为srm.exe的进程可以打：<br />
pskill \远程机器ip 999 或 pskill \远程机器ip srm</p>
<p>12、psloglist<br />
psloglist</p>
<p>psloglist是一个查看系统事件记录的程序。</p>
<p>它的使用格式为：<br />
psloglist [\远程机器ip [-u username [-p password]]] [-s [-t delimiter]] [-n # | -d #] [-c][-x][-r][-a mm/dd/yy][-b mm/dd/yy][-f filter] [-l event log file]<br />
它的参数有：<br />
-u 后面跟用户名 -p后面是跟密码的,如果建立ipc连接后这两个参数则不需要。<br />
-c:显示事件之后清理事件记录<br />
-l &lt; 事件记录文件名&gt;:用于查看事件记录文件<br />
-n ：只显示最近的n条系统事件记录。<br />
-d ：只显示n天以前的系统事件记录<br />
-a mm/dd/yy:显示mm/dd/yy以后的系统事件记录<br />
-b mm/dd/yy:显示mm/dd/yy以前的系统事件记录<br />
-f &lt; 事件类型&gt;：只显示指定的事件类型的系统事件记录。<br />
-x：显示事件数据代码<br />
-r：从旧到新排列（如不加则默认是从新到旧排列）<br />
-s:以一个事件为一行的格式显示，中间默认以逗号格开各个信息。<br />
-t &lt; 字符&gt;:这个参数和-s连用，以来改变-s中默认的逗号。<br />
如果我想看远程机器的系统事件记录只用打：<br />
psloglist \远程机器ip 123<br />
比如我想看最近的10条error类型的记录可以打：<br />
psloglist \远程机器ip -n 10 -f error</p>
<p>显示格式：</p>
<p>每个服务的属性按照以下格式显示。</p>
<p>&gt;服务名<br />
服务显示名<br />
[类型] [启动方式] [时间戳]<br />
服务程序全路径<br />
服务Dll全路径（共享进程的服务才有此项）</p>
<p>注：时间戳表示服务属性最后一次被改变的时间。用本程序改的除外。</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/416.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nokia e50刷机升级中途弹出找到新硬件问题解决</title>
		<link>http://226617.cn/archives/414.htm</link>
		<comments>http://226617.cn/archives/414.htm#comments</comments>
		<pubDate>Mon, 19 Jan 2009 15:00:17 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[软件相关]]></category>
		<category><![CDATA[nokia]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=414</guid>
		<description><![CDATA[最近我的e50感觉速度越来越慢，所以想重装下顺便升级。网上下载了最新的PC Suite 7.1 和nsu准备升级，试了n边每次都是升级到开始更新一会就弹出找到新硬件然后就提示刷新失败。后来折腾来折... ]]></description>
			<content:encoded><![CDATA[<p>最近我的e50感觉速度越来越慢，所以想重装下顺便升级。网上下载了最新的PC Suite 7.1 和nsu准备升级，试了n边每次都是升级到开始更新一会就弹出找到新硬件然后就提示刷新失败。后来折腾来折腾去，数据线驱动给我搞坏了，目录也给我删了，于是又去单独下载了个数据线驱动也没细看搞完竟然刷机成功了。在仔细对比一看原来我新下载的单独的数据线驱动是6.83的。晕感情新的7.1的驱动反而到有问题了</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/414.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>google shell版</title>
		<link>http://226617.cn/archives/373.htm</link>
		<comments>http://226617.cn/archives/373.htm#comments</comments>
		<pubDate>Tue, 06 Jan 2009 14:28:08 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[软件相关]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=373</guid>
		<description><![CDATA[http://goosh.org/ 真的很另类哈... ]]></description>
			<content:encoded><![CDATA[<p>http://goosh.org/</p>
<p>真的很另类哈哈</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/373.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>31个用来测试你网站各项性能的免费在线工具</title>
		<link>http://226617.cn/archives/361.htm</link>
		<comments>http://226617.cn/archives/361.htm#comments</comments>
		<pubDate>Fri, 26 Dec 2008 12:34:04 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[软件相关]]></category>
		<category><![CDATA[测试]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=361</guid>
		<description><![CDATA[网站代码验证 没人可以细致到保证自己的网站代码都是正确的，你可以通过以下测试来验证网站代码是否正确。 1 . WDG HTML Validator 一个很好的工具，能找出网站语法错误的地方，并标注出来，... ]]></description>
			<content:encoded><![CDATA[<h2><strong>网站代码验证</strong></h2>
<p>没人可以细致到保证自己的网站代码都是正确的，你可以通过以下测试来验证网站代码是否正确。</p>
<p><strong>1 . <a title=" http://www.htmlhelp.com/tools/validator/ " href="http://www.htmlhelp.com/tools/validator/">WDG HTML Validator</a></strong> 一个很好的工具，能找出网站语法错误的地方，并标注出来，也可选择对网站上单独的每一页进行单页分析。（ <strong>强烈推荐</strong> ）</p>
<p><strong>2 . <a title=" http://validator.w3.org/ " href="http://validator.w3.org/">W3C Markup Validation Service</a></strong> 对 HTML 和 XHTML 都能进行代码测试，自称是互联网络上第一个（也是使用者最多的）的 HTML 验证工具。</p>
<p><strong>3 . <a title=" http://jigsaw.w3.org/css-validator/ " href="http://jigsaw.w3.org/css-validator/">W3C CSS Validation Service</a></strong> 用于验证 css 源代码，能够标注出不好的 css 代码设计。例如：“Same colors for color and background-color in two contexts”。</p>
<p><strong>4 . <a title=" http://www.xml.com/pub/a/tools/ruwf/check.html " href="http://www.xml.com/pub/a/tools/ruwf/check.html">RUWF XML Syntax Checker</a></strong> 用于查找 XML 文件的错误。</p>
<p><strong>5 . <a title=" http://validator.w3.org/feed/ " href="http://validator.w3.org/feed/">W3C Feed Validation Service</a></strong> 用于查找 Atom 和 RSS feed 中的错误语法。（ <strong>这个我经常用到</strong> ）</p>
<p><strong>6 . <a title=" http://validator.w3.org/checklink " href="http://validator.w3.org/checklink">W3C Link Checker</a></strong> 用于搜寻查明你网站内的所有链接里是否有断链。（ <strong>强烈推荐</strong> ）</p>
<p><strong>7 . <a title=" http://juicystudio.com/services/linktest.php " href="http://juicystudio.com/services/linktest.php">Juicy Studio Link Analyser</a></strong> 测试网站内的链接的 URL 是否存在死链，与 W3C Link Checker 很类似。</p>
<h2><strong>网站的使用性</strong></h2>
<p>我们常常看到网站设计者把重点放在怎网站的吸引力上，而完全不考虑会不会影响来访者的使用，一个浏览难度很大的网页是注定要失败，要让你的来访者方便的得到他要的信息（从而成为重复访客），你的网站应当遵循 WCAG section 508 易用性规则。</p>
<p><strong>8 . <a title=" http://webxact.watchfire.com/ " href="http://webxact.watchfire.com/">Watchfire WebXACT</a></strong> 所有严谨的设计师和开发者都必须使用的工具，它会生成一个非常详尽的报告书，包括：网站质量，易用性和隐私等。（<strong> 强烈推荐</strong> ）</p>
<p><strong>9 . <a title=" http://checker.atrc.utoronto.ca/index.html " href="http://checker.atrc.utoronto.ca/index.html">ATRC Web Accessibility Checker</a></strong> 测试网站的 WCAG 2.0 Level2 兼容性，它会生成一份报告，提出一系列建议，如：如何提升页头，链接，数据，图表和文字的访问速度。</p>
<p><strong>10 . <a title=" http://www.wave.webaim.org/wave/index.jsp " href="http://www.wave.webaim.org/wave/index.jsp">WAVE 3.0 Web Accessibility Tool</a></strong> 高度可定制的工具，它采用了图形化模型展示网站兼容性问题（ WCAG 1.0 and section 508 ）。（ <strong>强烈推荐</strong> ）</p>
<p><strong>11 . <a title=" http://www.tawdis.net/taw3/cms/en " href="http://www.tawdis.net/taw3/cms/en">TAW Web Accessibility Test</a></strong> 测试网页是否存在冲突（ WCAG 1.0 兼容性 ），通过图形模式生成一份依据 wcag 优先模式为基础的网站修改建议。</p>
<p><strong>12 . <a title=" http://www.cynthiasays.com/ " href="http://www.cynthiasays.com/">HiSoftware CynthiaSays portal</a></strong> 采用了非常严格的规则来测试网页（ 根据 section 508 和 WCAG 1.0 规则 ），生成的报告也极为详细（ 详细到很难看懂 ）。</p>
<p><strong>13 . <a title=" http://www.sidar.org/hera/index.php.en " href="http://www.sidar.org/hera/index.php.en">HERA Accessibility testing with Style</a></strong> 使用一种极为复杂但容易理解方式指出网页的 wcag1.0 兼容性问题。</p>
<p><strong>14 . <a title=" http://juicystudio.com/services/csstest.php " href="http://juicystudio.com/services/csstest.php">Juicy Studio CSS Analyser</a></strong> 进行了色彩对比测试，以确保你的网站的色调会符合 WCAG 1.0 的要求。</p>
<p><strong>15 . <a title=" http://juicystudio.com/services/readability.php " href="http://juicystudio.com/services/readability.php">Juiciy Studio Readability Test</a></strong> 分析你网站上的文字是否有语法错误或拼写错误等问题，容易让人理解不（ 根据 the Flesch Reading Ease 和 Flesch-Kincaid grade level algorithms 规则 ）。（ 适合英文网站使用 ）</p>
<h2><strong>网站的速度</strong></h2>
<p>打开你的网站的速度快慢，是来访者会不会再次访问网站的关键因素，在一般情况下，一个网络不是很快的来访者是不愿意访问一个充满着图片、flash 动画、多媒体文件的网站。为了使你的网站覆盖人群的范围最大化，你必须优化你的网站，使它的打开速度尽可能的快。</p>
<p><strong>16 . <a title=" http://www.websiteoptimization.com/services/analyze/ " href="http://www.websiteoptimization.com/services/analyze/">Web Page Analyzer from Website Optimization</a></strong> 一个很好的工具，它在分析完一个网页后，会为减少加载时间提出优化建议，着重优化物体的数目，图片和网站的总体大小。（ <strong>强烈推荐</strong> ）</p>
<p><strong>17 . <a title=" http://www.websitepulse.com/help/tools.php " href="http://www.websitepulse.com/help/tools.php">WebSitePulse Test Tools</a></strong> 有一系列的工具来确定网站的加载速度和主机信息。</p>
<p><strong>18 . <a title=" http://internetsupervision.com/scripts/urlcheck/check.aspx " href="http://internetsupervision.com/scripts/urlcheck/check.aspx">Internet Supervision Url Check</a></strong> 从世界各地不同的服务器来测试你的网站的加载时间，用于确定是不是各地的来访者都能顺利快速的打开你得网站。</p>
<h2><strong>浏览器模拟工具</strong></h2>
<p>这是一个普遍的问题，因为现在有着很多的操作系统和浏览器，你得网站必须得兼容它们，但这绝不是一件容易的事。通过下列工具，你可以了解你得网站在各种浏览器上的显示效果。</p>
<p><strong>19 . <a title=" http://browsershots.org/ " href="http://browsershots.org/">Browsershots</a></strong> 能给出你的网站在不同浏览器下显示效果的截图，包括：Firefox 和 Internet Explorer （ Windows ）、Firefox 和 Safari （ Mac OS X ）、Iceweasal 和 Konqueror （ Linux ），但是结果要在 1 &#8211; 3 小时后才能出来。</p>
<p><strong>20 . <a title=" http://ipinfo.info/netrenderer/ " href="http://ipinfo.info/netrenderer/">IE NetRenderer</a></strong> 实时生成你的网站在 Internet Explorer 5.5 、6.0 和 7.0 下的截图。</p>
<p><strong>21 . <a title=" http://ready.mobi/launch.jsp?locale=en_EN " href="http://ready.mobi/launch.jsp?locale=en_EN">MobiReady Report</a></strong> 分析使用手机访问网页的兼容性问题，会生成一份详细的报告，并提供了在两种不同类型的手机浏览器上你得网站可能显示的样子。</p>
<h2><strong>搜索引擎优化 (SEO) </strong></h2>
<p>一个网站，如果对搜索引擎有着比较好的友好度，一定会比较有竞争力。</p>
<p><strong>22 . <a title=" http://www.urltrends.com/ " href="http://www.urltrends.com/">UrlTrends</a></strong> 会显示网站的访客是如何通过搜索引擎来到你的网站，还有各个流量是多少。这些数据是包括 Google, Yahoo, MSN, Alexa, AlltheWeb, AltaVista 和其他一些网站。（ <strong>强烈推荐</strong> ）</p>
<p><strong>23 . <a title=" http://www.iwebtool.com/backlink_checker " href="http://www.iwebtool.com/backlink_checker">iWEBTOOL Backlink Checker</a></strong> 一个很好的工具，它能找出有什么站点链接到你的站点，那些站点是什么类型的站点。</p>
<p><strong>24 . <a title=" http://www.iwebtool.com/multirank " href="http://www.iwebtool.com/multirank">iWEBTOOL Multi-Rank Checker</a></strong> 显示你网站的 Alexa 和 Google PageRank 数值。</p>
<p><strong>25 . <a title=" http://adlab.microsoft.com/default.aspx " href="http://adlab.microsoft.com/default.aspx">Microsoft adCenter Labs: Advertising and Keyword Research Tools</a></strong> 一个极好的工具，用于分析和预测你网站的来访者和市场。（ <strong>强烈推荐</strong> ）</p>
<p><strong>26 . <a title=" http://whois.domaintools.com/ " href="http://whois.domaintools.com/">Domain Tools Whois lookup</a></strong> 一个 WHOIS 网络工具。</p>
<p><strong>27 . <a title=" http://www.seo-browser.com/ " href="http://www.seo-browser.com/">SEO-Browser</a></strong> 可以让你看到在搜索引擎眼里一样的网站（ 去掉所有的”美丽”配件 ）。</p>
<p><strong>28 . <a title=" http://www.seoworkers.com/tool/analyzer.html " href="http://www.seoworkers.com/tool/analyzer.html">SEO Workers SEO Analysis Tool</a></strong> 非常有用的工具，分析了网站上的各种分类特征，包括 meta 标签、关键字密度及加载时间。（ <strong>强烈推荐</strong> ）</p>
<p><strong>29 . <a title=" http://www.seekport.co.uk/seekbot/ " href="http://www.seekport.co.uk/seekbot/">Seekport Seekbot</a></strong> 可以分析网站的数据和内容，以得出搜索引擎会如何有效的解释分析的网站。</p>
<p><strong>30 . <a title=" http://www.seochat.com/seo-tools/ " href="http://www.seochat.com/seo-tools/">SEO Chat SEO Tools</a></strong> 用以分析网站 Google adsense 盈利潜力，关键字密度，Meta tag 等等……</p>
<p><strong>31 . <a title=" http://www.marketleap.com/publinkpop/ " href="http://www.marketleap.com/publinkpop/">Marketleap Search Engine Marketing Tools</a></strong> 用来分析网页，让你知道你的网站检索、设定的关键字好不好。</p>
<p>原文：<a title=" http://www.avivadirectory.com/free-online-tests/ " href="http://www.avivadirectory.com/free-online-tests/">avivadirectory.com</a><br />
译者：<a title=" http://zsk.akaka.com.cn/ " href="http://zsk.akaka.com.cn/">peterzsk</a><br />
译文原地址：<a title=" http://zsk.akaka.com.cn/2007/06/31-free-tests-online/ " href="http://zsk.akaka.com.cn/2007/06/31-free-tests-online/">http://zsk.akaka.com.cn/2007/06/31-free-tests-online/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/361.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vim键位图</title>
		<link>http://226617.cn/archives/321.htm</link>
		<comments>http://226617.cn/archives/321.htm#comments</comments>
		<pubDate>Sun, 21 Dec 2008 15:05:28 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[linux相关]]></category>
		<category><![CDATA[软件相关]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=321</guid>
		<description><![CDATA[虽然现在linux下面的编辑软件越来越多，可是vim毕竟还是基础，功能也是强大，直到今天我也没完全掌握，放张图方便下以后查阅把 点击图片放... ]]></description>
			<content:encoded><![CDATA[<p>虽然现在linux下面的编辑软件越来越多，可是vim毕竟还是基础，功能也是强大，直到今天我也没完全掌握，放张图方便下以后查阅把<br />
<a href="http://226617.cn/wp-content/uploads/2008/12/vim.gif"></a><a class="highslide-image" onclick="return hs.expand(this, {captionId:'caption_1238316388460'});" href="http://226617.cn/wp-content/uploads/2008/12/vim.gif"><img title="Click to enlarge" src="http://226617.cn/wp-content/uploads/2008/12/vim-300x211.gif" alt="image" /></a></p>
<div id="caption_1238316388460" class="highslide-caption">点击图片放大</div>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/321.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pureftpd+mysql登陆后自动断开解决</title>
		<link>http://226617.cn/archives/212.htm</link>
		<comments>http://226617.cn/archives/212.htm#comments</comments>
		<pubDate>Sun, 28 Sep 2008 16:59:38 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[mysql相关]]></category>
		<category><![CDATA[只谈技术]]></category>
		<category><![CDATA[软件相关]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[pureftpd]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=212</guid>
		<description><![CDATA[最近迁移的机器多了，碰到的问题也就多。这个pureftpd+mysql就把我折腾了1天 症状就是登陆ftp后输完用户名和密码，ftp链接立刻就断开了 [00:14:19] [R] 正在连接到 10.130.128.146 -> IP=10.130.128.146 PORT=21 ... ]]></description>
			<content:encoded><![CDATA[<p>最近迁移的机器多了，碰到的问题也就多。这个pureftpd+mysql就把我折腾了1天<br />
症状就是登陆ftp后输完用户名和密码，ftp链接立刻就断开了<br />
<code>[00:14:19] [R] 正在连接到 10.130.128.146 -> IP=10.130.128.146 PORT=21 (次尝试 # 5)<br />
[00:14:19] [R] 已连接到 10.130.128.146<br />
[00:14:19] [R] 220---------- Welcome to Pure-FTPd ----------<br />
[00:14:19] [R] 220-You are user number 1 of 25 allowed.<br />
[00:14:19] [R] 220-Local time is now 00:13. Server port: 21.<br />
[00:14:19] [R] 220-This is a private system - No anonymous login<br />
[00:14:19] [R] 220 You will be disconnected after 15 minutes of inactivity.<br />
[00:14:19] [R] USER user89<br />
[00:14:19] [R] 331 User user89 OK. Password required<br />
[00:14:19] [R] PASS (hidden)<br />
[00:14:19] [R] 连接失败 (连接丢失)</code></p>
<p>注意这提示并非用户名密码错误。用户验证已经通过了。结果噩梦开始了，其实解决很简单，只要mysql里取出来的用户uid&#038;gid和用户主目录的uid&#038;gid对应就行。我一开始想到过这个问题，结果editplus里开了2个conf，我改的一个，结果上传的另一个&#8230;.我的天，我晚上在家从头开始配的时候竟然犯了同样的错误，绕了一大圈弯路，最后关配置文件打算用puredb才发现这个问题。</p>
<p>具体修改pureftpd-mysql.conf<br />
<code># Query to execute in order to fetch the system user name or uid<br />
# MYSQLGetUID     SELECT Uid FROM users WHERE User="\L"<br />
# Optional : default UID - if set this overrides MYSQLGetUID<br />
MYSQLDefaultUID 501<br />
# Query to execute in order to fetch the system user group or gid<br />
# MYSQLGetGID     SELECT Gid FROM users WHERE User="\L"<br />
# Optional : default GID - if set this overrides MYSQLGetGID<br />
MYSQLDefaultGID 501</code></p>
<p>我这所有用户目录所有者都是www:www，所以对照下etc/passwd里面www的uid和gid直接定义了MYSQLDefaultUID和MYSQLDefaultGID。不取mysql的</p>
<p>这里推荐个不错的pureftpd教程<br />
Pure-FTPd + LDAP + MySQL + PGSQL + Virtual-Users + Quota How To</p>
<p>http://netkiller.8800.org/article/ftpserver/</p>
<p>汗。。。看来最近迁移的服务器太多搞得头晕了，竟然是这种低级错误。看来国庆长假要好好休息了。</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/212.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rsync备份时排除指定目录</title>
		<link>http://226617.cn/archives/144.htm</link>
		<comments>http://226617.cn/archives/144.htm#comments</comments>
		<pubDate>Mon, 25 Aug 2008 15:12:46 +0000</pubDate>
		<dc:creator>龙飞</dc:creator>
				<category><![CDATA[软件相关]]></category>
		<category><![CDATA[rsync]]></category>

		<guid isPermaLink="false">http://226617.cn/?p=144</guid>
		<description><![CDATA[要排除指定目录，可以在客户端命令行中使用&#8211;exclude-from命令 例如 rsync -vzrtopg &#8211;progress &#8211;delete &#8211;exclude-from=/home/pcfile xxx@xxx.xxx.xxx.xxx::xxx /back/xxx pcfile内容写成 aaa/ bbb/ 这样，待同步... ]]></description>
			<content:encoded><![CDATA[<p>要排除指定目录，可以在客户端命令行中使用&#8211;exclude-from命令<br />
例如<br />
rsync -vzrtopg &#8211;progress &#8211;delete &#8211;exclude-from=/home/pcfile xxx@xxx.xxx.xxx.xxx::xxx /back/xxx</p>
<p>pcfile内容写成<br />
aaa/<br />
bbb/</p>
<p>这样，待同步目录中的子目录 aaa和bbb，就不在同步之列了<br />
以下内容待定<br />
同理，若要指定只同步某几个目录，可以用&#8211;include-from<br />
include 和 exclude指令则可以排除或不排除指定的文件</p>
]]></content:encoded>
			<wfw:commentRss>http://226617.cn/archives/144.htm/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

