<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[记点东西]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[可能主要是技术的]]></description>
<link>http://hi.baidu.com/cultnoble</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[document.getElementById的方法并不靠谱]]></title>
        <link><![CDATA[http://hi.baidu.com/cultnoble/blog/item/d93618cec8dc220992457e92.html]]></link>
        <description><![CDATA[
		
		今天做一个用户体验问卷调查，用到了document.getElementById，在有些环境下会出错。<strong>这个方法在以后对整个文档的内容都了如指掌的时候可以用，别的时候慎用！</strong><br>
在工作中有一些处事的技巧必须要去掌握了：<br>
1.<strong> 别主动去接本职工作以外的任务</strong>，因为你很难做的出彩，如果你中规中矩的做完了任务，没人会重视你，感激你。如果你一不小心出了错误，不好意思，别人就会觉得你能力不行，没干好，认栽吧。<strong>在公司，不管什么时候，认认真真的去完成自己的本职工作，别的工作，别管。</strong><br>
2. <strong>和同事合作的时候，一定要明确任务</strong>，自己要对自己的任务非常清楚，并负有责任，对非自己的任务也非常清楚，并且不负有责任。<br>
3.<strong>如果自己有道理，去争，别妥协</strong>。说出自己的想法，否则别人只会觉得你没道理，可欺。 <a href="http://hi.baidu.com/cultnoble/blog/item/d93618cec8dc220992457e92.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/cultnoble/blog/category/Javascript">Javascript</a>&nbsp;<a href="http://hi.baidu.com/cultnoble/blog/item/d93618cec8dc220992457e92.html#comment">查看评论</a>]]></description>
        <pubDate>2009-12-01  16:29</pubDate>
        <category><![CDATA[Javascript]]></category>
        <author><![CDATA[cultnoble]]></author>
		<guid>http://hi.baidu.com/cultnoble/blog/item/d93618cec8dc220992457e92.html</guid>
</item>

<item>
        <title><![CDATA[base64编码解码]]></title>
        <link><![CDATA[http://hi.baidu.com/cultnoble/blog/item/c8f91395e80d7d41d0135e47.html]]></link>
        <description><![CDATA[
		
		<pre class="javascript"><span style="color: rgb(0, 102, 0); font-style: italic;">/**<br>*<br>*  Base64 encode / decode<br>*  http://www.webtoolkit.info/<br>*<br>**/</span><br>&#160;<br><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> Base64 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 153, 0);">{</span><br>&#160;<br> <span style="color: rgb(0, 102, 0); font-style: italic;">// private property</span><br> _keyStr <span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(51, 102, 204);">&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=&quot;</span><span style="color: rgb(51, 153, 51);">,</span><br>&#160;<br> <span style="color: rgb(0, 102, 0); font-style: italic;">// public method for encoding</span><br> encode <span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span> <span style="color: rgb(0, 153, 0);">(</span>input<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>  <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> output <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">&quot;&quot;</span><span style="color: rgb(51, 153, 51);">;</span><br>  <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> chr1<span style="color: rgb(51, 153, 51);">,</span> chr2<span style="color: rgb(51, 153, 51);">,</span> chr3<span style="color: rgb(51, 153, 51);">,</span> enc1<span style="color: rgb(51, 153, 51);">,</span> enc2<span style="color: rgb(51, 153, 51);">,</span> enc3<span style="color: rgb(51, 153, 51);">,</span> enc4<span style="color: rgb(51, 153, 51);">;</span><br>  <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> i <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>  input <span style="color: rgb(51, 153, 51);">=</span> Base64._utf8_encode<span style="color: rgb(0, 153, 0);">(</span>input<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>  <span style="color: rgb(0, 0, 102); font-weight: bold;">while</span> <span style="color: rgb(0, 153, 0);">(</span>i <span style="color: rgb(51, 153, 51);">&lt;</span> input.<span style="color: rgb(102, 0, 102);">length</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>&#160;<br>   chr1 <span style="color: rgb(51, 153, 51);">=</span> input.<span style="color: rgb(102, 0, 102);">charCodeAt</span><span style="color: rgb(0, 153, 0);">(</span>i<span style="color: rgb(51, 153, 51);">++</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   chr2 <span style="color: rgb(51, 153, 51);">=</span> input.<span style="color: rgb(102, 0, 102);">charCodeAt</span><span style="color: rgb(0, 153, 0);">(</span>i<span style="color: rgb(51, 153, 51);">++</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   chr3 <span style="color: rgb(51, 153, 51);">=</span> input.<span style="color: rgb(102, 0, 102);">charCodeAt</span><span style="color: rgb(0, 153, 0);">(</span>i<span style="color: rgb(51, 153, 51);">++</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>   enc1 <span style="color: rgb(51, 153, 51);">=</span> chr1 <span style="color: rgb(51, 153, 51);">&gt;&gt;</span> <span style="color: rgb(204, 0, 0);">2</span><span style="color: rgb(51, 153, 51);">;</span><br>   enc2 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>chr1 <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">3</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">&lt;&lt;</span> <span style="color: rgb(204, 0, 0);">4</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> <span style="color: rgb(0, 153, 0);">(</span>chr2 <span style="color: rgb(51, 153, 51);">&gt;&gt;</span> <span style="color: rgb(204, 0, 0);">4</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   enc3 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>chr2 <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">15</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">&lt;&lt;</span> <span style="color: rgb(204, 0, 0);">2</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> <span style="color: rgb(0, 153, 0);">(</span>chr3 <span style="color: rgb(51, 153, 51);">&gt;&gt;</span> <span style="color: rgb(204, 0, 0);">6</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   enc4 <span style="color: rgb(51, 153, 51);">=</span> chr3 <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">63</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>   <span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span>isNaN<span style="color: rgb(0, 153, 0);">(</span>chr2<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>    enc3 <span style="color: rgb(51, 153, 51);">=</span> enc4 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(204, 0, 0);">64</span><span style="color: rgb(51, 153, 51);">;</span><br>   <span style="color: rgb(0, 153, 0);">}</span> <span style="color: rgb(0, 0, 102); font-weight: bold;">else</span> <span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span>isNaN<span style="color: rgb(0, 153, 0);">(</span>chr3<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>    enc4 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(204, 0, 0);">64</span><span style="color: rgb(51, 153, 51);">;</span><br>   <span style="color: rgb(0, 153, 0);">}</span><br>&#160;<br>   output <span style="color: rgb(51, 153, 51);">=</span> output <span style="color: rgb(51, 153, 51);">+</span><br>   <span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>._keyStr.<span style="color: rgb(102, 0, 102);">charAt</span><span style="color: rgb(0, 153, 0);">(</span>enc1<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">+</span> <span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>._keyStr.<span style="color: rgb(102, 0, 102);">charAt</span><span style="color: rgb(0, 153, 0);">(</span>enc2<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">+</span><br>   <span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>._keyStr.<span style="color: rgb(102, 0, 102);">charAt</span><span style="color: rgb(0, 153, 0);">(</span>enc3<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">+</span> <span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>._keyStr.<span style="color: rgb(102, 0, 102);">charAt</span><span style="color: rgb(0, 153, 0);">(</span>enc4<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>  <span style="color: rgb(0, 153, 0);">}</span><br>&#160;<br>  <span style="color: rgb(0, 0, 102); font-weight: bold;">return</span> output<span style="color: rgb(51, 153, 51);">;</span><br> <span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span><br>&#160;<br> <span style="color: rgb(0, 102, 0); font-style: italic;">// public method for decoding</span><br> decode <span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span> <span style="color: rgb(0, 153, 0);">(</span>input<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>  <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> output <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">&quot;&quot;</span><span style="color: rgb(51, 153, 51);">;</span><br>  <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> chr1<span style="color: rgb(51, 153, 51);">,</span> chr2<span style="color: rgb(51, 153, 51);">,</span> chr3<span style="color: rgb(51, 153, 51);">;</span><br>  <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> enc1<span style="color: rgb(51, 153, 51);">,</span> enc2<span style="color: rgb(51, 153, 51);">,</span> enc3<span style="color: rgb(51, 153, 51);">,</span> enc4<span style="color: rgb(51, 153, 51);">;</span><br>  <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> i <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>  input <span style="color: rgb(51, 153, 51);">=</span> input.<span style="color: rgb(102, 0, 102);">replace</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 102); font-style: italic;">/[^A-Za-z0-9\+\/\=]/g</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(51, 102, 204);">&quot;&quot;</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>  <span style="color: rgb(0, 0, 102); font-weight: bold;">while</span> <span style="color: rgb(0, 153, 0);">(</span>i <span style="color: rgb(51, 153, 51);">&lt;</span> input.<span style="color: rgb(102, 0, 102);">length</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>&#160;<br>   enc1 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>._keyStr.<span style="color: rgb(102, 0, 102);">indexOf</span><span style="color: rgb(0, 153, 0);">(</span>input.<span style="color: rgb(102, 0, 102);">charAt</span><span style="color: rgb(0, 153, 0);">(</span>i<span style="color: rgb(51, 153, 51);">++</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   enc2 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>._keyStr.<span style="color: rgb(102, 0, 102);">indexOf</span><span style="color: rgb(0, 153, 0);">(</span>input.<span style="color: rgb(102, 0, 102);">charAt</span><span style="color: rgb(0, 153, 0);">(</span>i<span style="color: rgb(51, 153, 51);">++</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   enc3 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>._keyStr.<span style="color: rgb(102, 0, 102);">indexOf</span><span style="color: rgb(0, 153, 0);">(</span>input.<span style="color: rgb(102, 0, 102);">charAt</span><span style="color: rgb(0, 153, 0);">(</span>i<span style="color: rgb(51, 153, 51);">++</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   enc4 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>._keyStr.<span style="color: rgb(102, 0, 102);">indexOf</span><span style="color: rgb(0, 153, 0);">(</span>input.<span style="color: rgb(102, 0, 102);">charAt</span><span style="color: rgb(0, 153, 0);">(</span>i<span style="color: rgb(51, 153, 51);">++</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>   chr1 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 153, 0);">(</span>enc1 <span style="color: rgb(51, 153, 51);">&lt;&lt;</span> <span style="color: rgb(204, 0, 0);">2</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> <span style="color: rgb(0, 153, 0);">(</span>enc2 <span style="color: rgb(51, 153, 51);">&gt;&gt;</span> <span style="color: rgb(204, 0, 0);">4</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   chr2 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>enc2 <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">15</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">&lt;&lt;</span> <span style="color: rgb(204, 0, 0);">4</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> <span style="color: rgb(0, 153, 0);">(</span>enc3 <span style="color: rgb(51, 153, 51);">&gt;&gt;</span> <span style="color: rgb(204, 0, 0);">2</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   chr3 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>enc3 <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">3</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">&lt;&lt;</span> <span style="color: rgb(204, 0, 0);">6</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> enc4<span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>   output <span style="color: rgb(51, 153, 51);">=</span> output <span style="color: rgb(51, 153, 51);">+</span> String.<span style="color: rgb(102, 0, 102);">fromCharCode</span><span style="color: rgb(0, 153, 0);">(</span>chr1<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>   <span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span>enc3 <span style="color: rgb(51, 153, 51);">!=</span> <span style="color: rgb(204, 0, 0);">64</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>    output <span style="color: rgb(51, 153, 51);">=</span> output <span style="color: rgb(51, 153, 51);">+</span> String.<span style="color: rgb(102, 0, 102);">fromCharCode</span><span style="color: rgb(0, 153, 0);">(</span>chr2<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   <span style="color: rgb(0, 153, 0);">}</span><br>   <span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span>enc4 <span style="color: rgb(51, 153, 51);">!=</span> <span style="color: rgb(204, 0, 0);">64</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>    output <span style="color: rgb(51, 153, 51);">=</span> output <span style="color: rgb(51, 153, 51);">+</span> String.<span style="color: rgb(102, 0, 102);">fromCharCode</span><span style="color: rgb(0, 153, 0);">(</span>chr3<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   <span style="color: rgb(0, 153, 0);">}</span><br>&#160;<br>  <span style="color: rgb(0, 153, 0);">}</span><br>&#160;<br>  output <span style="color: rgb(51, 153, 51);">=</span> Base64._utf8_decode<span style="color: rgb(0, 153, 0);">(</span>output<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>  <span style="color: rgb(0, 0, 102); font-weight: bold;">return</span> output<span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br> <span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span><br>&#160;<br> <span style="color: rgb(0, 102, 0); font-style: italic;">// private method for UTF-8 encoding</span><br> _utf8_encode <span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span> <span style="color: rgb(0, 153, 0);">(</span>string<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>  string <span style="color: rgb(51, 153, 51);">=</span> string.<span style="color: rgb(102, 0, 102);">replace</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 102); font-style: italic;">/\r\n/g</span><span style="color: rgb(51, 153, 51);">,</span><span style="color: rgb(51, 102, 204);">&quot;<span style="color: rgb(0, 0, 153); font-weight: bold;">\n</span>&quot;</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>  <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> utftext <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">&quot;&quot;</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>  <span style="color: rgb(0, 0, 102); font-weight: bold;">for</span> <span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> n <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(51, 153, 51);">;</span> n <span style="color: rgb(51, 153, 51);">&lt;</span> string.<span style="color: rgb(102, 0, 102);">length</span><span style="color: rgb(51, 153, 51);">;</span> n<span style="color: rgb(51, 153, 51);">++</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>&#160;<br>   <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> c <span style="color: rgb(51, 153, 51);">=</span> string.<span style="color: rgb(102, 0, 102);">charCodeAt</span><span style="color: rgb(0, 153, 0);">(</span>n<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>   <span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&lt;</span> <span style="color: rgb(204, 0, 0);">128</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>    utftext <span style="color: rgb(51, 153, 51);">+=</span> String.<span style="color: rgb(102, 0, 102);">fromCharCode</span><span style="color: rgb(0, 153, 0);">(</span>c<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   <span style="color: rgb(0, 153, 0);">}</span><br>   <span style="color: rgb(0, 0, 102); font-weight: bold;">else</span> <span style="color: rgb(0, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&gt;</span> <span style="color: rgb(204, 0, 0);">127</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">&amp;&amp;</span> <span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&lt;</span> <span style="color: rgb(204, 0, 0);">2048</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>    utftext <span style="color: rgb(51, 153, 51);">+=</span> String.<span style="color: rgb(102, 0, 102);">fromCharCode</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&gt;&gt;</span> <span style="color: rgb(204, 0, 0);">6</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> <span style="color: rgb(204, 0, 0);">192</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>    utftext <span style="color: rgb(51, 153, 51);">+=</span> String.<span style="color: rgb(102, 0, 102);">fromCharCode</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">63</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> <span style="color: rgb(204, 0, 0);">128</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   <span style="color: rgb(0, 153, 0);">}</span><br>   <span style="color: rgb(0, 0, 102); font-weight: bold;">else</span> <span style="color: rgb(0, 153, 0);">{</span><br>    utftext <span style="color: rgb(51, 153, 51);">+=</span> String.<span style="color: rgb(102, 0, 102);">fromCharCode</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&gt;&gt;</span> <span style="color: rgb(204, 0, 0);">12</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> <span style="color: rgb(204, 0, 0);">224</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>    utftext <span style="color: rgb(51, 153, 51);">+=</span> String.<span style="color: rgb(102, 0, 102);">fromCharCode</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&gt;&gt;</span> <span style="color: rgb(204, 0, 0);">6</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">63</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> <span style="color: rgb(204, 0, 0);">128</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>    utftext <span style="color: rgb(51, 153, 51);">+=</span> String.<span style="color: rgb(102, 0, 102);">fromCharCode</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">63</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> <span style="color: rgb(204, 0, 0);">128</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>   <span style="color: rgb(0, 153, 0);">}</span><br>&#160;<br>  <span style="color: rgb(0, 153, 0);">}</span><br>&#160;<br>  <span style="color: rgb(0, 0, 102); font-weight: bold;">return</span> utftext<span style="color: rgb(51, 153, 51);">;</span><br> <span style="color: rgb(0, 153, 0);">}</span><span style="color: rgb(51, 153, 51);">,</span><br>&#160;<br> <span style="color: rgb(0, 102, 0); font-style: italic;">// private method for UTF-8 decoding</span><br> _utf8_decode <span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span> <span style="color: rgb(0, 153, 0);">(</span>utftext<span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>  <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> string <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(51, 102, 204);">&quot;&quot;</span><span style="color: rgb(51, 153, 51);">;</span><br>  <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> i <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(51, 153, 51);">;</span><br>  <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> c <span style="color: rgb(51, 153, 51);">=</span> c1 <span style="color: rgb(51, 153, 51);">=</span> c2 <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(204, 0, 0);">0</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>  <span style="color: rgb(0, 0, 102); font-weight: bold;">while</span> <span style="color: rgb(0, 153, 0);">(</span> i <span style="color: rgb(51, 153, 51);">&lt;</span> utftext.<span style="color: rgb(102, 0, 102);">length</span> <span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>&#160;<br>   c <span style="color: rgb(51, 153, 51);">=</span> utftext.<span style="color: rgb(102, 0, 102);">charCodeAt</span><span style="color: rgb(0, 153, 0);">(</span>i<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>&#160;<br>   <span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&lt;</span> <span style="color: rgb(204, 0, 0);">128</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>    string <span style="color: rgb(51, 153, 51);">+=</span> String.<span style="color: rgb(102, 0, 102);">fromCharCode</span><span style="color: rgb(0, 153, 0);">(</span>c<span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>    i<span style="color: rgb(51, 153, 51);">++;</span><br>   <span style="color: rgb(0, 153, 0);">}</span><br>   <span style="color: rgb(0, 0, 102); font-weight: bold;">else</span> <span style="color: rgb(0, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&gt;</span> <span style="color: rgb(204, 0, 0);">191</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">&amp;&amp;</span> <span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&lt;</span> <span style="color: rgb(204, 0, 0);">224</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(0, 153, 0);">{</span><br>    c2 <span style="color: rgb(51, 153, 51);">=</span> utftext.<span style="color: rgb(102, 0, 102);">charCodeAt</span><span style="color: rgb(0, 153, 0);">(</span>i<span style="color: rgb(51, 153, 51);">+</span><span style="color: rgb(204, 0, 0);">1</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>    string <span style="color: rgb(51, 153, 51);">+=</span> String.<span style="color: rgb(102, 0, 102);">fromCharCode</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">31</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">&lt;&lt;</span> <span style="color: rgb(204, 0, 0);">6</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> <span style="color: rgb(0, 153, 0);">(</span>c2 <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">63</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>    i <span style="color: rgb(51, 153, 51);">+=</span> <span style="color: rgb(204, 0, 0);">2</span><span style="color: rgb(51, 153, 51);">;</span><br>   <span style="color: rgb(0, 153, 0);">}</span><br>   <span style="color: rgb(0, 0, 102); font-weight: bold;">else</span> <span style="color: rgb(0, 153, 0);">{</span><br>    c2 <span style="color: rgb(51, 153, 51);">=</span> utftext.<span style="color: rgb(102, 0, 102);">charCodeAt</span><span style="color: rgb(0, 153, 0);">(</span>i<span style="color: rgb(51, 153, 51);">+</span><span style="color: rgb(204, 0, 0);">1</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>    c3 <span style="color: rgb(51, 153, 51);">=</span> utftext.<span style="color: rgb(102, 0, 102);">charCodeAt</span><span style="color: rgb(0, 153, 0);">(</span>i<span style="color: rgb(51, 153, 51);">+</span><span style="color: rgb(204, 0, 0);">2</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>    string <span style="color: rgb(51, 153, 51);">+=</span> String.<span style="color: rgb(102, 0, 102);">fromCharCode</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>c <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">15</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">&lt;&lt;</span> <span style="color: rgb(204, 0, 0);">12</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> <span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 153, 0);">(</span>c2 <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">63</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">&lt;&lt;</span> <span style="color: rgb(204, 0, 0);">6</span><span style="color: rgb(0, 153, 0);">)</span> <span style="color: rgb(51, 153, 51);">|</span> <span style="color: rgb(0, 153, 0);">(</span>c3 <span style="color: rgb(51, 153, 51);">&amp;</span> <span style="color: rgb(204, 0, 0);">63</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span><br>    i <span style="color: rgb(51, 153, 51);">+=</span> <span style="color: rgb(204, 0, 0);">3</span><span style="color: rgb(51, 153, 51);">;</span><br>   <span style="color: rgb(0, 153, 0);">}</span><br>&#160;<br>  <span style="color: rgb(0, 153, 0);">}</span><br>&#160;<br>  <span style="color: rgb(0, 0, 102); font-weight: bold;">return</span> string<span style="color: rgb(51, 153, 51);">;</span><br> <span style="color: rgb(0, 153, 0);">}</span><br>&#160;<br><span style="color: rgb(0, 153, 0);">}</span></pre> <a href="http://hi.baidu.com/cultnoble/blog/item/c8f91395e80d7d41d0135e47.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/cultnoble/blog/category/Javascript">Javascript</a>&nbsp;<a href="http://hi.baidu.com/cultnoble/blog/item/c8f91395e80d7d41d0135e47.html#comment">查看评论</a>]]></description>
        <pubDate>2009-11-26  17:03</pubDate>
        <category><![CDATA[Javascript]]></category>
        <author><![CDATA[cultnoble]]></author>
		<guid>http://hi.baidu.com/cultnoble/blog/item/c8f91395e80d7d41d0135e47.html</guid>
</item>

<item>
        <title><![CDATA[js跨域post参数并控制当前页面显示]]></title>
        <link><![CDATA[http://hi.baidu.com/cultnoble/blog/item/c0ca61a1ed45b1824610644c.html]]></link>
        <description><![CDATA[
		
		ajax可以post参数，但是不可以跨域<br>
<br>
用script标签的src属性；Image对象的src属性 可以跨域，但是又只能get参数<br>
<br>
所以要用js跨域只有两种方法：<br>
1. <strong>本域代理</strong>：ajax向本域下某个文件post参数，这个文件再和别的域下的文件进行交互<br>
2. <strong>iframe</strong>：js动态生成一个隐藏的iframe，在这个iframe中动态插入一个form，用js向另一个域下的文件提交这个form，接收提交的文件，输出js，js中使用parent来操作当前页面的dom对象<br>
<br>
最近做一个投票系统，有一个题库，可以在别的系统调用这个题库，并把这些题展示给用户，题型包括单选，多选和问答。在别的系统向投票系统提交投票结果的时候，因为两个系统可能不在同一个域下，所以要支持跨域提交，又因为问答题的答案可能很长，超过url长度限制，所以要用post方式。为了让这种跨域的post提交在用户不知觉的情况下进行，需要使用js来实现。js跨域post提交，有本域代理和iframe两种方法。本域代理的方法实现起来比较复杂，而且如果展示投票接口的系统变化的时候，需要在新的系统中编写代理。iframe的方法有很好的复用性。但是post参数的构造过程完全可见，怕黑客循环提交进行攻击。 <a href="http://hi.baidu.com/cultnoble/blog/item/c0ca61a1ed45b1824610644c.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/cultnoble/blog/category/%C8%D5%BC%C7">日记</a>&nbsp;<a href="http://hi.baidu.com/cultnoble/blog/item/c0ca61a1ed45b1824610644c.html#comment">查看评论</a>]]></description>
        <pubDate>2009-08-19  21:05</pubDate>
        <category><![CDATA[日记]]></category>
        <author><![CDATA[cultnoble]]></author>
		<guid>http://hi.baidu.com/cultnoble/blog/item/c0ca61a1ed45b1824610644c.html</guid>
</item>

<item>
        <title><![CDATA[memcache 方法小结（转）]]></title>
        <link><![CDATA[http://hi.baidu.com/cultnoble/blog/item/24e01d5c76064a4afaf2c076.html]]></link>
        <description><![CDATA[
		
		Memcache函数库是在PECL(PHP Extension Community Library)中，主要作用是搭建大容量的内存数据的临时存放区域，在分布式的时候作用体现的非常明显，否则不建议使用。<br>
<br>
在《phper》电子杂志的第一期中，有黑夜路人写的关于Memcache的详细安装教程，本人在ubuntu上安装完运行的时候报错：<br>
/usr/local/memcached/bin/memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory<br>
<br>
按照：《libeven、memcached、libmemcache安装》中的方法，使用：<br>
<br>
sudo ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2<br>
可以修正这个BUG<br>
<br>
通过新得立安装php的memcached模块，注销/etc/php5/conf.d/memcached.ini里面的&ldquo;;&rdquo;，重启apache，调用phpinfo()出现memcached的信息<br>
<br>
执行：<br>
<br>
/usr/local/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid<br>
memcached的服务正式启动<br>
<br>
Memcache::add &mdash; 添加一个值，如果已经存在，则返回false<br>
Memcache::addServer &mdash; 添加一个可供使用的服务器地址<br>
Memcache::close &mdash; 关闭一个Memcache对象<br>
Memcache::connect &mdash; 创建一个Memcache对象<br>
memcache_debug &mdash; 控制调试功能<br>
Memcache::decrement &mdash; 对保存的某个key中的值进行减法操作<br>
Memcache::delete &mdash; 删除一个key值<br>
Memcache::flush &mdash; 清除所有缓存的数据<br>
Memcache::get &mdash; 获取一个key值<br>
Memcache::getExtendedStats &mdash; 获取进程池中所有进程的运行系统统计<br>
Memcache::getServerStatus &mdash; 获取运行服务器的参数<br>
Memcache::getStats &mdash; 返回服务器的一些运行统计信息<br>
Memcache::getVersion &mdash; 返回运行的Memcache的版本信息<br>
Memcache::increment &mdash; 对保存的某个key中的值进行加法操作<br>
Memcache::pconnect &mdash; 创建一个Memcache的持久连接对象<br>
Memcache::replace &mdash; R对一个已有的key进行覆写操作<br>
Memcache::set &mdash; 添加一个值，如果已经存在，则覆写<br>
Memcache::setCompressThreshold &mdash; 对大于某一大小的数据进行压缩<br>
Memcache::setServerParams &mdash; 在运行时修改服务器的参数<br>
<br>
建议用面向对象的方式来测试这个库：<br>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://blog.daxi8.cn/#">view plain</a><a href="http://blog.daxi8.cn/#">print</a><a href="http://blog.daxi8.cn/#">?</a></div>
</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span>&lt;?php&nbsp;&nbsp;</span></span></li>
    <li><span><span class="vars">$memcache</span><span> = </span><span class="keyword">new</span><span> Memcache;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="vars">$memcache</span><span>-&gt;connect(</span><span class="string">'localhost'</span><span>, 11211) </span><span class="keyword">or</span><span> </span><span class="keyword">die</span><span> (</span><span class="string">&quot;Could not connect&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li><span><span class="vars">$version</span><span> = </span><span class="vars">$memcache</span><span>-&gt;getVersion();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="func">echo</span><span> </span><span class="string">&quot;Server's version: &quot;</span><span>.</span><span class="vars">$version</span><span>.</span><span class="string">&quot;</span> </span></li>
    <li><span><span class="string">\n&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
&lt;?php $memcache = new Memcache; $memcache-&gt;connect('localhost', 11211) or die (&quot;Could not connect&quot;); $version = $memcache-&gt;getVersion(); echo &quot;Server's version: &quot;.$version.&quot; \n&quot;; ?&gt; <br>
Memcache::getVersion方法的作用是返回运行的Memcache的版本信息。<br>
<br>
Memcache::getStats 方法的作用是返回服务器的一些运行统计信息。Memcache::getStats方法有三个参数，第一个参数表示要求返回的类型：reset, malloc, maps, cachedump, slabs, items, sizes;第二个参数和第三个参数是在第一个参数设置为&ldquo;cachedump&rdquo;时使用的。Memcache::getExtendedStats方法的 作用是获取进程池中所有进程的运行系统统计。<br>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://blog.daxi8.cn/#">view plain</a><a href="http://blog.daxi8.cn/#">print</a><a href="http://blog.daxi8.cn/#">?</a></div>
</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span>&lt;?php&nbsp;&nbsp;</span></span></li>
    <li><span><span class="vars">$memcache</span><span> = </span><span class="keyword">new</span><span> Memcache;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="vars">$memcache</span><span>-&gt;connect(</span><span class="string">'localhost'</span><span>, 11211) </span><span class="keyword">or</span><span> </span><span class="keyword">die</span><span> (</span><span class="string">&quot;Could not connect&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li><span>print_r(<span class="vars">$memcache</span><span>-&gt;getStats());&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">/**</span> </span></li>
    <li><span><span class="comment"> * Array</span> </span></li>
    <li class="alt"><span><span class="comment"> * (</span> </span></li>
    <li><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [pid] =&gt; 8052</span> </span></li>
    <li class="alt"><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [uptime] =&gt; 9205</span> </span></li>
    <li><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [time] =&gt; 1205898428</span> </span></li>
    <li class="alt"><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [version] =&gt; 1.2.5</span> </span></li>
    <li><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [pointer_size] =&gt; 32</span> </span></li>
    <li class="alt"><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [rusage_user] =&gt; 0.008000</span> </span></li>
    <li><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [rusage_system] =&gt; 0.000000</span> </span></li>
    <li class="alt"><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [curr_items] =&gt; 1</span> </span></li>
    <li><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [total_items] =&gt; 17</span> </span></li>
    <li class="alt"><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [bytes] =&gt; 57</span> </span></li>
    <li><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [curr_connections] =&gt; 2</span> </span></li>
    <li class="alt"><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [total_connections] =&gt; 15</span> </span></li>
    <li><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [connection_structures] =&gt; 3</span> </span></li>
    <li class="alt"><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [cmd_get] =&gt; 9</span> </span></li>
    <li><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [cmd_set] =&gt; 23</span> </span></li>
    <li class="alt"><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [get_hits] =&gt; 5</span> </span></li>
    <li><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [get_misses] =&gt; 4</span> </span></li>
    <li class="alt"><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [evictions] =&gt; 0</span> </span></li>
    <li><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [bytes_read] =&gt; 671</span> </span></li>
    <li class="alt"><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [bytes_written] =&gt; 850</span> </span></li>
    <li><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [limit_maxbytes] =&gt; 10485760</span> </span></li>
    <li class="alt"><span><span class="comment"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [threads] =&gt; 1</span> </span></li>
    <li><span><span class="comment"> * )</span> </span></li>
    <li class="alt"><span><span class="comment"> */</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
&lt;?php $memcache = new Memcache; $memcache-&gt;connect('localhost', 11211) or die (&quot;Could not connect&quot;); print_r($memcache-&gt;getStats()); /** * Array * ( *&nbsp;&nbsp;&nbsp;&nbsp;  [pid] =&gt; 8052 *&nbsp;&nbsp;&nbsp;&nbsp;  [uptime] =&gt; 9205 *&nbsp;&nbsp;&nbsp;&nbsp;  [time] =&gt; 1205898428 *&nbsp;&nbsp;&nbsp;&nbsp;  [version] =&gt; 1.2.5 *&nbsp;&nbsp;&nbsp;&nbsp;  [pointer_size] =&gt; 32 *&nbsp;&nbsp;&nbsp;&nbsp;  [rusage_user] =&gt; 0.008000 *&nbsp;&nbsp;&nbsp;&nbsp;  [rusage_system] =&gt; 0.000000 *&nbsp;&nbsp;&nbsp;&nbsp;  [curr_items] =&gt; 1 *&nbsp;&nbsp;&nbsp;&nbsp;  [total_items] =&gt; 17 *&nbsp;&nbsp;&nbsp;&nbsp;  [bytes] =&gt; 57 *&nbsp;&nbsp;&nbsp;&nbsp;  [curr_connections] =&gt; 2 *&nbsp;&nbsp;&nbsp;&nbsp;  [total_connections] =&gt; 15 *&nbsp;&nbsp;&nbsp;&nbsp;  [connection_structures] =&gt; 3 *&nbsp;&nbsp;&nbsp;&nbsp;  [cmd_get] =&gt; 9 *&nbsp;&nbsp;&nbsp;&nbsp;  [cmd_set] =&gt; 23 *&nbsp;&nbsp;&nbsp;&nbsp;  [get_hits] =&gt; 5 *&nbsp;&nbsp;&nbsp;&nbsp;  [get_misses] =&gt; 4 *&nbsp;&nbsp;&nbsp;&nbsp;  [evictions] =&gt; 0 *&nbsp;&nbsp;&nbsp;&nbsp;  [bytes_read] =&gt; 671 *&nbsp;&nbsp;&nbsp;&nbsp;  [bytes_written] =&gt; 850 *&nbsp;&nbsp;&nbsp;&nbsp;  [limit_maxbytes] =&gt; 10485760 *&nbsp;&nbsp;&nbsp;&nbsp;  [threads] =&gt; 1 * ) */ ?&gt; <br>
Memcache::connect方法的作用是创建一个Memcache对象。Memcache::pconnect方法的作用是创建一个Memcache的持久连接对象。Memcache::close方法的作用是关闭一个Memcache对象。<br>
<br>
Memcache::set 方法的作用是添加一个值，Memcache::set方法有四个参数，第一个参数是key，第二个参数是value，第三个参数可选，表示是否压缩保存， 第四个参数可选，用来设置一个过期自动销毁的时间。Memcache::add方法的作用和Memcache::set方法类似，区别是如果 Memcache::add方法的返回值为false，表示这个key已经存在，而Memcache::set方法则会直接覆写。 Memcache::get方法的作用是获取一个key值，Memcache::get方法有一个参数，表示key。Memcache::replace 方法的作用是对一个已有的key进行覆写操作，Memcache::replace方法有四个参数，作用和Memcache::set方法的相同。 Memcache::delete方法的作用是删除一个key值，Memcache::delete方法有两个参数，第一个参数表示key，第二个参数可 选，表示删除延迟的时间。<br>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://blog.daxi8.cn/#">view plain</a><a href="http://blog.daxi8.cn/#">print</a><a href="http://blog.daxi8.cn/#">?</a></div>
</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span>&lt;?php&nbsp;&nbsp;</span></span></li>
    <li><span><span class="vars">$memcache</span><span> = </span><span class="keyword">new</span><span> Memcache;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="vars">$memcache</span><span>-&gt;connect(</span><span class="string">'localhost'</span><span>, 11211) </span><span class="keyword">or</span><span> </span><span class="keyword">die</span><span> (</span><span class="string">&quot;Could not connect&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li><span><span class="vars">$memcache</span><span>-&gt;set( </span><span class="string">'name'</span><span>, </span><span class="string">'leo'</span><span>, 0, 30);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">if</span><span>(!</span><span class="vars">$memcache</span><span>-&gt;add( </span><span class="string">'name'</span><span>, </span><span class="string">'susan'</span><span>, 0, 30))&nbsp;&nbsp;</span></span></li>
    <li><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="func">echo</span><span> </span><span class="string">'susan is exist'</span><span>;&nbsp;&nbsp;</span></span></li>
    <li><span>};&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="vars">$memcache</span><span>-&gt;replace( </span><span class="string">'name'</span><span>, </span><span class="string">'lion'</span><span>, 0, 300);&nbsp;&nbsp;</span></span></li>
    <li><span><span class="func">echo</span><span> </span><span class="vars">$memcache</span><span>-&gt;get( </span><span class="string">'name'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="vars">$memcache</span><span>-&gt;</span><span class="func">delete</span><span>( </span><span class="string">'name'</span><span>, 5);&nbsp;&nbsp;</span></span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
&lt;?php $memcache = new Memcache; $memcache-&gt;connect('localhost', 11211) or die (&quot;Could not connect&quot;); $memcache-&gt;set( 'name', 'leo', 0, 30); if(!$memcache-&gt;add( 'name', 'susan', 0, 30)) { &nbsp;&nbsp;&nbsp;&nbsp;  echo 'susan is exist'; }; $memcache-&gt;replace( 'name', 'lion', 0, 300); echo $memcache-&gt;get( 'name'); $memcache-&gt;delete( 'name', 5); ?&gt; <br>
memcache_debug()函数的作用是控制调试功能，前提是php在编译的时候使用了&ndash;enable-debug选项，否则这个函数不会有作用。<br>
<br>
Memcache::addServer 方法的作用是添加一个可供使用的服务器地址，Memcache::addServer方法有8个参数，除了第一个参数意外，其他都是可选的，第一个参数表 示服务器的地址，第二个参数表示端口，第三个参数表示是否是一个持久连接，第四个参数表示这台服务器在所有服务器中所占的权重，第五个参数表示连接的持续 时间，第六个参数表示连接重试的间隔时间，默认为15,设置为-1表示不进行重试，第七个参数用来控制服务器的在线状态，第8个参数允许设置一个回掉函数 来处理错误信息。<br>
Memcache::setServerParams方法的作用是在运行时修改服务器的参 数，Memcache::setServerParams方法有六个参数，Memcache::addServer方法少了第三和第四个参数。 Memcache::getServerStatus方法的作用是获取运行服务器的参数，两个参数分别表示的地址和端口。<br>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://blog.daxi8.cn/#">view plain</a><a href="http://blog.daxi8.cn/#">print</a><a href="http://blog.daxi8.cn/#">?</a></div>
</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span>&lt;?php&nbsp;&nbsp;</span></span></li>
    <li><span><span class="keyword">function</span><span> _callback_memcache_failure(</span><span class="vars">$host</span><span>, </span><span class="vars">$port</span><span>) {&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;  print <span class="string">&quot;memcache '$host:$port' failed&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="vars">$memcache</span><span> = </span><span class="keyword">new</span><span> Memcache;&nbsp;&nbsp;</span></span></li>
    <li><span><span class="vars">$memcache</span><span>-&gt;addServer(</span><span class="string">'192.168.1.116'</span><span>, 11211);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="vars">$memcache</span><span>-&gt;setServerParams(</span><span class="string">'192.168.1.116'</span><span>, 11211, 1, 15, true, </span><span class="string">'_callback_memcache_failure'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li><span><span class="func">echo</span><span> </span><span class="vars">$memcache</span><span>-&gt;getServerStatus(</span><span class="string">'192.168.1.116'</span><span>, 11211);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
&lt;?php function _callback_memcache_failure($host, $port) { &nbsp;&nbsp;&nbsp;&nbsp;  print &quot;memcache '$host:$port' failed&quot;; } $memcache = new Memcache; $memcache-&gt;addServer('192.168.1.116', 11211); $memcache-&gt;setServerParams('192.168.1.116', 11211, 1, 15, true, '_callback_memcache_failure'); echo $memcache-&gt;getServerStatus('192.168.1.116', 11211); ?&gt; <br>
Memcache::flush方法的作用是清除所有缓存的数据，但是不会削去使用的内存空间。<br>
<br>
Memcache::increment方法的作用是对保存的某个key中的值进行加法操作，Memcache::decremen方法的作用是对保存的某个key中的值进行减法操作。<br>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://blog.daxi8.cn/#">view plain</a><a href="http://blog.daxi8.cn/#">print</a><a href="http://blog.daxi8.cn/#">?</a></div>
</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span>&lt;?php&nbsp;&nbsp;</span></span></li>
    <li><span><span class="vars">$memcache</span><span> = </span><span class="keyword">new</span><span> Memcache;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="vars">$memcache</span><span>-&gt;connect(</span><span class="string">'localhost'</span><span>, 11211);&nbsp;&nbsp;</span></span></li>
    <li><span><span class="vars">$memcache</span><span>-&gt;set(</span><span class="string">'test_item'</span><span>, 8);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="vars">$memcache</span><span>-&gt;increment(</span><span class="string">'test_item'</span><span>, 4);&nbsp;&nbsp;</span></span></li>
    <li><span><span class="func">echo</span><span> </span><span class="vars">$memcache</span><span>-&gt;decrement(</span><span class="string">'test_item'</span><span>, 7);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">// 显示 5</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
&lt;?php $memcache = new Memcache; $memcache-&gt;connect('localhost', 11211); $memcache-&gt;set('test_item', 8); $memcache-&gt;increment('test_item', 4); echo $memcache-&gt;decrement('test_item', 7); // 显示 5 ?&gt; <br>
setCompressThreshold方法的作用是对大于某一大小的数据进行压缩。setCompressThreshold方法有两个参数，第一个参数表示处理数据大小的临界点，第二个参数表示压缩的比例，默认为0.2。<br>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://blog.daxi8.cn/#">view plain</a><a href="http://blog.daxi8.cn/#">print</a><a href="http://blog.daxi8.cn/#">?</a></div>
</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span>&lt;?php&nbsp;&nbsp;</span></span></li>
    <li><span><span class="vars">$memcache</span><span> = </span><span class="keyword">new</span><span> Memcache;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="vars">$memcache</span><span>-&gt;addServer(</span><span class="string">'memcache_host'</span><span>, 11211);&nbsp;&nbsp;</span></span></li>
    <li><span><span class="vars">$memcache</span><span>-&gt;setCompressThreshold(20000, 0.2);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>?&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
&lt;?php $memcache = new Memcache; $memcache-&gt;addServer('memcache_host', 11211); $memcache-&gt;setCompressThreshold(20000, 0.2); ?&gt; <a href="http://hi.baidu.com/cultnoble/blog/item/24e01d5c76064a4afaf2c076.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/cultnoble/blog/category/Php">Php</a>&nbsp;<a href="http://hi.baidu.com/cultnoble/blog/item/24e01d5c76064a4afaf2c076.html#comment">查看评论</a>]]></description>
        <pubDate>2009-06-22  15:58</pubDate>
        <category><![CDATA[Php]]></category>
        <author><![CDATA[cultnoble]]></author>
		<guid>http://hi.baidu.com/cultnoble/blog/item/24e01d5c76064a4afaf2c076.html</guid>
</item>

<item>
        <title><![CDATA[svn 使用方法]]></title>
        <link><![CDATA[http://hi.baidu.com/cultnoble/blog/item/d20418fd60c5dc4dd7887dfd.html]]></link>
        <description><![CDATA[
		
		http://windows.chinaitlab.com/accessing/713621.html<br>
<br>
http://blog.csdn.net/shaily/archive/2008/06/20/2568398.aspx 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/cultnoble/blog/category/%B4%CE%BC%B6%B2%D6%BF%E2">次级仓库</a>&nbsp;<a href="http://hi.baidu.com/cultnoble/blog/item/d20418fd60c5dc4dd7887dfd.html#comment">查看评论</a>]]></description>
        <pubDate>2009-04-02  00:42</pubDate>
        <category><![CDATA[次级仓库]]></category>
        <author><![CDATA[cultnoble]]></author>
		<guid>http://hi.baidu.com/cultnoble/blog/item/d20418fd60c5dc4dd7887dfd.html</guid>
</item>

<item>
        <title><![CDATA[ajax异步调用的同步]]></title>
        <link><![CDATA[http://hi.baidu.com/cultnoble/blog/item/1d1d4a2305745643ac34de18.html]]></link>
        <description><![CDATA[
		
		当<strong>进行ajax异步调用</strong>的时候，当前程序流和每一个ajax调用都是异步执行了，对于共享变量（同一个变量）的操作，要注意同步和互斥的问题。<br>
比如<br>
var  a = 1；<br>
ajax调用把 a 赋值成2；<br>
alert(a)；<br>
这时候打印出的 a 很可能还是1。因为执行alert(a) 的时候ajax调用不一定已经给 a 赋值。<br>
我们可以使用ajax的回调函数解决这个问题，ajax的<strong>回调函数</strong>是在ajax的调用完成的时候执行的，假设回调函数是callback：<br>
var a = 1；<br>
ajax调用把 a 赋值成2；<br>
function callback() { alert(a); }<br>
<br>
当需要<strong>循环调用同一个ajax方法</strong>的时候，最好用递归的方法，在一个ajax调用完成的回调函数中再去调用下一个ajax方法。<br>
<br>
需要<strong>调用多个不同的ajax方法</strong>的时候，要分清楚各个方法的调用和完成时间，要注意共享变量，利用回调函数，满足自己的顺序要求。<br> <a href="http://hi.baidu.com/cultnoble/blog/item/1d1d4a2305745643ac34de18.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/cultnoble/blog/category/Javascript">Javascript</a>&nbsp;<a href="http://hi.baidu.com/cultnoble/blog/item/1d1d4a2305745643ac34de18.html#comment">查看评论</a>]]></description>
        <pubDate>2009-02-23  21:53</pubDate>
        <category><![CDATA[Javascript]]></category>
        <author><![CDATA[cultnoble]]></author>
		<guid>http://hi.baidu.com/cultnoble/blog/item/1d1d4a2305745643ac34de18.html</guid>
</item>

<item>
        <title><![CDATA[lvs和nginx比较（转）]]></title>
        <link><![CDATA[http://hi.baidu.com/cultnoble/blog/item/e9d35d184a4a75b34bedbc67.html]]></link>
        <description><![CDATA[
		
		<a href=":;" target="_self"><u><strong>lvs</strong></u></a>和<a href=":;" target="_self"><u><strong>nginx</strong></u></a>都可以用作多机负载的方案，它们各有优缺，在生产环境中需要好好分析实际情况并加以利用。<span style="display: none;">BSD爱好者乐园 F r#l G f o O</span><br>
<span style="display: none;">BSD爱好者乐园)k%d,O d8i Q!s</span><br>
首先提醒，做技术切不可人云亦云，我云即你云；同时也不可太趋向保守，过于相信旧有方式而等别人来帮你做垫被测试。把所有即时听说到的好东西加以钻研，从而提高自己对技术的认知和水平，乃是一个好习惯。<span style="display: none;">BSD爱好者乐园 ` B5U ` \ C k</span><br>
<span style="display: none;">BSD爱好者乐园,\ Z B:k2{#r1F q</span><br>
下面来分析一下两者：<br>
<span style="display: none;">2U;Q R,w K | C</span><span style="display: none;">BSD爱好者乐园 e7A f \ H u-j6? _/H</span><br>
一、lvs的优势：<span style="display: none;">BSD爱好者乐园 Q U K'k o T }</span><br>
<br>
<span style="display: none;"> b l Q V m%W m#^</span>1、 抗负载能力强，因为lvs工作方式的逻辑是非常之简单，而且工作在网络4层仅做请求分发之用，没有流量，所以在效率上基本不需要太过考虑。在我手里的 lvs，仅仅出过一次问题：在并发最高的一小段时间内均衡器出现丢包现象，据分析为网络问题，即网卡或linux2.4内核的承载能力已到上限，<a href=":;" target="_self"><u><strong>内存</strong></u></a>和cpu方面基本无消耗。<span style="display: none;">BSD爱好者乐园 v'r j$u }</span><br>
<span style="display: none;">BSD爱好者乐园 K x S T e h,m ~</span><br>
2、配置性低，这通常是一大劣势，但同时也是一大优势，因为没有太多可配置的选项，所以除了增减服务器，并不需要经常去触碰它，大大减少了人为出错的几率。<br>
<span style="display: none;">2| A9b'|5~,Z9w7[%o ]+w</span><span style="display: none;">BSD爱好者乐园1{2G#z R d/h</span><br>
3、工作稳定，因为其本身抗负载能力很强，所以稳定性高也是顺理成章，另外各种lvs都有完整的双机热备方案，所以一点不用担心均衡器本身会出什么问题，节点出现故障的话，lvs会自动判别，所以系统整体是非常稳定的。<br>
<span style="display: none;"> n5M d&quot;f ] t G a</span><br>
<span style="display: none;">9z/M z%r p9Q k</span>4、无流量，上面已经有所提及了。lvs仅仅分发请求，而流量并不从它本身出去，所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。<span style="display: none;">BSD爱好者乐园 k _ q @ [ V</span><br>
<br>
<span style="display: none;">5T1A,L n#p-r u l,@ e B</span>5、基本上能支持所有应用，因为lvs工作在4层，所以它可以对几乎所有应用做<a href=":;" target="_self"><u><strong>负载均衡</strong></u></a>，包括http、数据库、聊天室等等。<span style="display: none;">BSD爱好者乐园 [-h H#A ^</span><br>
<span style="display: none;">BSD爱好者乐园 | \ G V Q | q&quot;_</span><br>
另：lvs也不是完全能判别节点故障的，譬如在wlc分配方式下，集群里有一个节点没有配置VIP，会使整个集群不能使用，这时使用wrr分配方式则会丢掉一台机。目前这个问题还在进一步测试中。所以，用lvs也得多多当心为妙。<br>
<span style="display: none;">8j M2Z c0e Y1].N</span><span style="display: none;">BSD爱好者乐园 ~3t,W)D n&quot;m&amp;k</span><br>
二、nginx和lvs作对比的结果<span style="display: none;">BSD爱好者乐园 O L E,^(z u</span><br>
<br>
<span style="display: none;">0Z5w k ^#Z0K!N</span>1、 nginx工作在网络的7层，所以它可以针对http应用本身来做分流策略，比如针对域名、目录结构等，相比之下lvs并不具备这样的功能，所以 nginx单凭这点可利用的场合就远多于lvs了；但nginx有用的这些功能使其可调整度要高于lvs，所以经常要去触碰触碰，由lvs的第2条优点 看，触碰多了，人为出问题的几率也就会大。<br>
<span style="display: none;">$S,Y+o W H _</span><br>
<span style="display: none;"> | n W _ D P6B</span>2、nginx对网络的依赖较小，理论上只要ping得通，网页访问正常，nginx就能连得通，nginx同时还能区分内外网，如果是同时拥有内外网的节点，就相当于单机拥有了<a href=":;" target="_self"><u><strong>备份</strong></u></a>线 路；lvs就比较依赖于网络环境，目前来看服务器在同一网段内并且lvs使用direct方式分流，效果较能得到保证。另外注意，lvs需要向托管商至少 申请多一个ip来做Visual IP，貌似是不能用本身的IP来做VIP的。要做好LVS管理员，确实得跟进学习很多有关网络通信方面的知识，就不再是一个HTTP那么简单了。<span style="display: none;">BSD爱好者乐园 X8a4P c'L8v8?</span><br>
<br>
<span style="display: none;"> T$p(| { i y m \</span>3、nginx安装和配置比较简单，测试起来也很方便，因为它基本能把错误用<a href=":;" target="_self"><u><strong>日志</strong></u></a>打印出来。lvs的<a href=":;" target="_self"><u><strong>安装</strong></u></a>和配置、测试就要花比较长的时间了，因为同上所述，lvs对网络依赖比较大，很多时候不能配置成功都是因为网络问题而不是配置问题，出了问题要解决也相应的会麻烦得多。<br>
<span style="display: none;">5Y b j,f T J G2{ E8S9} {</span><br>
<span style="display: none;">!Y C&quot;F C:? l @ z ^(E</span>4、nginx也同样能承受很高负载且稳定，但负载度和稳定度差lvs还有几个等级：nginx处理所有流量所以受限于机器IO和配置；本身的bug也还是难以避免的；nginx没有现成的双机热备方案，所以跑在单机上还是风险较大，单机上的事情全都很难说。<span style="display: none;">BSD爱好者乐园 X B g&amp;h J { A V7~</span><br>
<br>
<span style="display: none;"> G l;C y4w</span>5、nginx可以检测到服务器内部的故障，比如根据服务器处理网页返回的状态码、超时等等，并且会把返回错误的请求重新提交到另一个节点。目前lvs中ldirectd也能支持针对服务器内部的情况来<a href=":;" target="_self"><u><strong>监控</strong></u></a>，但lvs的原理使其不能重发请求。重发请求这点，譬如用户正在上传一个<a href=":;" target="_self"><u><strong>文件</strong></u></a>，而处理该上传的节点刚好在上传过程中出现故障，nginx会把上传切到另一台服务器重新处理，而lvs就直接断掉了，如果是上传一个很大的文件或者很重要的文件的话，用户可能会因此而恼火。<br>
<span style="display: none;">5A P }%c/x)A</span><br>
<span style="display: none;">'x A4U V H4\</span>6、nginx对请求的异步处理可以帮助节点服务器减轻负载，假如使用<a href=":;" target="_self"><u><strong>apache</strong></u></a>直接对外服务，那么出现很多的窄带链接时apache服务器将会占用大量内存而不能释放，使用多一个nginx做apache代理的话，这些窄带链接会被nginx挡住，apache上就不会堆积过多的请求，这样就减少了相当多的内存占用。这点使用<a href=":;" target="_self"><u><strong>squid</strong></u></a>也有相同的作用，即使squid本身配置为不缓存，对apache还是有很大帮助的。lvs没有这些功能，也就无法能比较。<br>
<span style="display: none;">.v y&quot;p y n U h-W</span><br>
<span style="display: none;">9b q#y u k ~#Z;| @ j#[ b</span>7、nginx能支持http和email（email的功能估计比较少人用），lvs所支持的应用在这点上会比nginx更多。<br>
<span style="display: none;"> ~ \$P f-L</span><br>
<span style="display: none;"> s G ?.H3t0V,\ H/A</span>在使用上，一般最前端所采取的策略应是lvs，也就是DNS的指向应为lvs均衡器，lvs的优点令它非常适合做这个任务。<span style="display: none;">BSD爱好者乐园 v | v l P Z</span><br>
<br>
<span style="display: none;">!Z6m \6y&quot;g p Q5t/R L</span>重要的ip地址，最好交由lvs托管，比如数据库的ip、webservice服务器的ip等等，这些ip地址随着时间推移，使用面会越来越大，如果更换ip则故障会接踵而至。所以将这些重要ip交给lvs托管是最为稳妥的，这样做的唯一缺点是需要的VIP数量会比较多。<br>
<span style="display: none;"> o @ v&amp;C c</span><span style="display: none;">BSD爱好者乐园%c7_ Z-B Z:o;U M</span><br>
nginx可作为lvs节点机器使用，一是可以利用nginx的功能，二是可以利用nginx的性能。当然这一层面也可以直接使用squid，squid的功能方面就比nginx弱不少了，性能上也有所逊色于nginx。<br>
<span style="display: none;">:Y+T&amp;v y M T ?*l</span><span style="display: none;">BSD爱好者乐园7s3G8k Z R Y K H&quot;|</span><br>
nginx 也可作为中层代理使用，这一层面nginx基本上无对手，唯一可以撼动nginx的就只有lighttpd了，不过lighttpd目前还没有能做到 nginx完全的功能，配置也不那么清晰易读。另外，中层代理的IP也是重要的，所以中层代理也拥有一个VIP和lvs是最完美的方案了。<span style="display: none;">BSD爱好者乐园 Y&quot;^1b C9E0m:~</span><br>
<span style="display: none;">BSD爱好者乐园._+@9t2N y D!w</span><br>
nginx也可作为网页静态服务器，不过超出了本文讨论的范畴，简单提一下。<span style="display: none;">BSD爱好者乐园 f8c w O J1{ Z#~0B v</span><br>
<span style="display: none;">BSD爱好者乐园 ~ x'\ n W e%h</span><br>
具体的应用还得具体分析，如果是比较小的网站（日PV&lt;1000万），用nginx就完全可以了，如果机器也不少，可以用DNS轮询，lvs所耗费的机器还是比较多的；大型网站或者重要的服务，机器不发愁的时候，要多多考虑利用lvs。 <a href="http://hi.baidu.com/cultnoble/blog/item/e9d35d184a4a75b34bedbc67.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/cultnoble/blog/category/Linux">Linux</a>&nbsp;<a href="http://hi.baidu.com/cultnoble/blog/item/e9d35d184a4a75b34bedbc67.html#comment">查看评论</a>]]></description>
        <pubDate>2009-01-20  18:04</pubDate>
        <category><![CDATA[Linux]]></category>
        <author><![CDATA[cultnoble]]></author>
		<guid>http://hi.baidu.com/cultnoble/blog/item/e9d35d184a4a75b34bedbc67.html</guid>
</item>

<item>
        <title><![CDATA[urf8等字符编码中，汉字由几个字符表示]]></title>
        <link><![CDATA[http://hi.baidu.com/cultnoble/blog/item/a8cb91905c0d0a8aa977a485.html]]></link>
        <description><![CDATA[
		
		1. UTF-8 汉字用3个字符表示<br>
UTF-8 使用一至四个字节为每个字符编码。128 个 ASCII 字符（Unicode 范围由 U+0000 至 U+007F）只需一个字节，带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及马尔代夫语（Unicode 范围由 U+0080 至 U+07FF）需要二个字节，其他基本多文种平面（BMP）中的字符（CJK属于此类-Qieqie注）使用<strong><span style="color: red;">三个字节</span></strong>，其他 Unicode 辅助平面的字符使用四字节编码。<br>
例子：数据库字段长度为char(20)，采用urf8编码，那么只能存6个汉字。所以在表单提交时要做如下验证：<br>
var  str = &quot;这是表单提交的数据&quot;;  str.repalce(/[^\x00-\xff]/g,'***').length &gt; 20  则报错<br> <a href="http://hi.baidu.com/cultnoble/blog/item/a8cb91905c0d0a8aa977a485.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/cultnoble/blog/category/Mysql">Mysql</a>&nbsp;<a href="http://hi.baidu.com/cultnoble/blog/item/a8cb91905c0d0a8aa977a485.html#comment">查看评论</a>]]></description>
        <pubDate>2008-12-25  11:13</pubDate>
        <category><![CDATA[Mysql]]></category>
        <author><![CDATA[cultnoble]]></author>
		<guid>http://hi.baidu.com/cultnoble/blog/item/a8cb91905c0d0a8aa977a485.html</guid>
</item>

<item>
        <title><![CDATA[svn 解决冲突方法]]></title>
        <link><![CDATA[http://hi.baidu.com/cultnoble/blog/item/443169fbaad501254e4aeaf2.html]]></link>
        <description><![CDATA[
		
		<div class="cnt" >
<p style="margin-right: 0px;" dir="ltr">转自：<a href="http://www.blogjava.net/shrode/articles/85598.html">http://www.blogjava.net/shrode/articles/85598.html</a></p>
<p style="margin-right: 0px;" dir="ltr">本人使用SVN的时间不是很长，在使用之前也仅仅是粗浅的了解过这个 软件。从今年的8月份开始，由于一个项目使用Eclipse 3.1，跨地域的开发，为了适应不同的开发人员处于不同的地理位置，因此我们使用SVN作为团队开发的管理工具。开始使用时，仅仅是边学边用，遇到不懂的 地方再去查找资料。今天由于有点时间，先把合并过程遇到的冲突问题详细了解一下。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   可以使用svn status -u命令来查看一下某个问题是否会有冲突发生。在使用svn update 的时候，会出现如下一些信息：<br>
$ svn update<br>
U  INSTALL<br>
G  README<br>
C  bar.c<br>
Updated to revision 46.<br>
<br>
那么，U 开头的信息提示你，这个文件在你本地没有修改过，文件已经根据版本库的新版本更新了。G 开头的信息提示你，这个文件在你本地已经修改过，但是和版本库中对应的版本并没有冲突的地方，svn已经合并更新了。而C 开头的信息提示你，这个文件有点麻烦，你在本地的修改和版本库中的版本修改的地方重叠了，也就是说，你修改了某一行，你的同事也修改了同一行。这个就需要 你自己手工去解决了。当冲突发生时，要注意到有三件事情可以帮助你解决问题。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  a.Subversion会给这个文件作出c标记。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  b.如果Subversion认为这个文件时可以合并的，它会一个冲突标记（特殊的横线来分开冲突的代码块）<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  c.对每一个冲突的文件，Subversion放置三个额外的未版本化文件到你的工作拷贝。<br>
<br>
filename.mine<br>
&nbsp;&nbsp;&nbsp;&nbsp;   你更新前的文件，没有冲突标志，只是你最新更改的内容。（如果这个文件不可以合并，.mine文件不会创建，因为它和工作文件相同。）<br>
<br>
filename.rOLDREV<br>
&nbsp;&nbsp;&nbsp;&nbsp;   这个是你做更新操作以前的BASE版本，就是你在上次更新之后未作更改的版本。<br>
<br>
filename.rNEWREV<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  这是Subversion从服务器刚刚收到的版本。这个版本就是版本库的HEAD版本。<br>
<br>
<br>
例如，如果sally修改了一个文件sandwich.txt, 而harry也刚刚修改了这个文件的相同位置并提交到服务器。那么sally在做这个文件的update操作的时候会得到三个额外的文件 sandwich.txt.mine、sandwich.txt.r1、sandwich.txt.r2。并且在提交的时候会遭到服务器的拒绝，因为这个 文件的冲突问题还没有得到解决。要解决这个冲突，可以选择：<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  a. 手工合并冲突文件（检查和修改文件中的冲突标志）。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  b.用一个临时文件（三个中的一个）覆盖你的工作文件。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  c.运行svn revert &lt;filename&gt;来放弃所有的修改。<br>
<br>
一旦解决了你的冲突，需要通过命令svn resolved让subversion知道并删除三个临时文件。这时才可以提交。<br>
<br>
下面再说说手工合并冲突。开始的时候让人觉得害怕，但做一段时间之后，就觉得不那么烦人了。<br>
<br>
看看如下文本：<br>
Mayonnaise<br>
Lettuce<br>
Tomato<br>
Provolone<br>
&lt;&lt;&lt;&lt;&lt;&lt;&lt; .mine<br>
Salami<br>
Mortadella<br>
Prosciutto<br>
=======<br>
Sauerkraut<br>
Grilled Chicken<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r2<br>
Creole Mustard<br>
<br>
<br>
一连串的大于、小于、等于号是冲突标记，这些数据得全部删除才可以提交。其中,<br>
&nbsp;&nbsp;&nbsp;  &lt;&lt;&lt;&lt;&lt;&lt;&lt; .mine<br>
Salami<br>
Mortadella<br>
Prosciutto<br>
=======<br>
是你在冲突区里面做的修改。<br>
<br>
Sauerkraut<br>
Grilled Chicken<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r2<br>
是别人在冲突区做的修改。<br>
<br>
在冲突区中，或许你需要和你的同事沟通来安排冲突区的文本内容，如果是程序代码，你需要和同事商量一下，中间的这段代码到底应该是什么样子的。<br>
<br>
所有冲突区得到合理的解决之后，你就可以提交你的文件了。</p>
</div> <a href="http://hi.baidu.com/cultnoble/blog/item/443169fbaad501254e4aeaf2.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/cultnoble/blog/category/%B4%CE%BC%B6%B2%D6%BF%E2">次级仓库</a>&nbsp;<a href="http://hi.baidu.com/cultnoble/blog/item/443169fbaad501254e4aeaf2.html#comment">查看评论</a>]]></description>
        <pubDate>2008-12-19  12:09</pubDate>
        <category><![CDATA[次级仓库]]></category>
        <author><![CDATA[cultnoble]]></author>
		<guid>http://hi.baidu.com/cultnoble/blog/item/443169fbaad501254e4aeaf2.html</guid>
</item>

<item>
        <title><![CDATA[js函数实现urlencode和urldecode(转)]]></title>
        <link><![CDATA[http://hi.baidu.com/cultnoble/blog/item/5b27f5738bdc9c1b8701b0be.html]]></link>
        <description><![CDATA[
		
		<dl><dd class="cont"><span >
<p>用的浏览器内部转换器实现转换，方法是动态创建一个容器标签元素，如DIV，将要转换的字符串设置为这个元素的innerText，然后返回这个元素的innerHTML，即得到经过HTML编码转换的字符串。</p>
<p>function HTMLEncode ( input )<br>
{<br>
var converter = document.createElement(&quot;DIV&quot;);<br>
converter.innerText = input;<br>
var output = converter.innerHTML;<br>
converter = null;<br>
return output;<br>
}</p>
<p>当然，还可以用相同的方法实现对字符串的HTMLDecode解码，但有个问题就是紧跟在字符&quot;&lt;&quot;后面的非空字符将连同字符&quot;&lt;&quot;同 时显示不出来。当然，对字符串作相应处理是可以解决这个问题的，比如在字符&quot;&lt;&quot;后面加个空格，解码后再去掉就行，这是后话。毕竟，要使用 HTMLDecode方法解码，自然是字符串已经经过HTMLEncode方法编码了，而经过HTMLEncode编码后的字符串，是不可能有字 符&quot;&lt;&quot;存在的。</p>
<p>function HTMLDecode ( input )<br>
{<br>
var converter = document.createElement(&quot;DIV&quot;);<br>
converter.innerHTML = input;<br>
var output = converter.innerText;<br>
converter = null;<br>
return output;<br>
}</p>
</span></dd></dl> <a href="http://hi.baidu.com/cultnoble/blog/item/5b27f5738bdc9c1b8701b0be.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/cultnoble/blog/category/%B4%CE%BC%B6%B2%D6%BF%E2">次级仓库</a>&nbsp;<a href="http://hi.baidu.com/cultnoble/blog/item/5b27f5738bdc9c1b8701b0be.html#comment">查看评论</a>]]></description>
        <pubDate>2008-11-20  11:21</pubDate>
        <category><![CDATA[次级仓库]]></category>
        <author><![CDATA[cultnoble]]></author>
		<guid>http://hi.baidu.com/cultnoble/blog/item/5b27f5738bdc9c1b8701b0be.html</guid>
</item>


</channel>
</rss>