<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>周末记事</title><link>https://www.snuday.com/</link><description>Good Snuday  Luck To You!</description><item><title>INSERT INTO .. ON DUPLICATE KEY更新多行记录,自动判断重复,更新</title><link>https://www.snuday.com/post/952.html</link><description>&lt;p&gt;如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE，并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值，则执行旧行UPDATE；如果不会导致唯一值列重复的问题，则插入新行。例如，如果列a被定义为UNIQUE，并且包含值1，则以下两个语句具有相同的效果：&lt;/p&gt;&lt;div style=&quot;white-space: nowrap; overflow: auto&quot; class=&quot;codecolorer-container sql default&quot;&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;    &lt;tbody&gt;        &lt;tr&gt;            &lt;td class=&quot;line-numbers&quot;&gt;            &lt;div&gt;1&lt;br /&gt;            2&lt;br /&gt;            3&lt;br /&gt;            4&lt;br /&gt;            &amp;nbsp;&lt;/div&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;div class=&quot;sql codecolorer&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;INTO&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;b&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;c&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;br /&gt;            &lt;span class=&quot;kw1&quot;&gt;VALUES&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;ON&lt;/span&gt; DUPLICATE &lt;span class=&quot;kw1&quot;&gt;KEY&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;UPDATE&lt;/span&gt; c&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;c&lt;span class=&quot;sy0&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;            &lt;br /&gt;            &lt;span class=&quot;kw1&quot;&gt;UPDATE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;SET&lt;/span&gt; c&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;c&lt;span class=&quot;sy0&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;WHERE&lt;/span&gt; a&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;/div&gt;            &lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;如果行作为新记录被插入，则受影响行的值为1；如果原有的记录被更新，则受影响行的值为2。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;如果你想了解更多关于INSERT INTO .. ON DUPLICATE KEY的功能说明，详见MySQL参考文档：&lt;a title=&quot;INSERT语法&quot; href=&quot;http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#insert&quot;&gt;13.2.4. INSERT语法&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;现在问题来了，如果INSERT多行记录， ON DUPLICATE KEY UPDATE后面字段的值怎么指定？要知道一条INSERT语句中只能有一个ON DUPLICATE KEY UPDATE，到底他会更新一行记录，还是更新所有需要更新的行。这个问题困扰了我很久了，其实使用VALUES()函数一切问题都解决了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;举个例子，字段a被定义为UNIQUE，并且原数据库表table中已存在记录(2,2,9)和(3,2,1)，如果插入记录的a值与原有记录重复，则更新原有记录，否则插入新行：&lt;/p&gt;&lt;div style=&quot;white-space: nowrap; overflow: auto&quot; class=&quot;codecolorer-container sql default&quot;&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;    &lt;tbody&gt;        &lt;tr&gt;            &lt;td class=&quot;line-numbers&quot;&gt;            &lt;div&gt;1&lt;br /&gt;            2&lt;br /&gt;            3&lt;br /&gt;            4&lt;br /&gt;            5&lt;br /&gt;            6&lt;br /&gt;            &amp;nbsp;&lt;/div&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;div class=&quot;sql codecolorer&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;INTO&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;b&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;c&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;VALUES&lt;/span&gt; &lt;br /&gt;            &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;kw1&quot;&gt;ON&lt;/span&gt; DUPLICATE &lt;span class=&quot;kw1&quot;&gt;KEY&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;UPDATE&lt;/span&gt; b&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;VALUES&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;b&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/div&gt;            &lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;以上SQL语句的执行，发现(2,5,7)中的a与原有记录(2,2,9)发生唯一值冲突，则执行ON DUPLICATE KEY UPDATE，将原有记录(2,2,9)更新成(2,5,9)，将(3,2,1)更新成(3,3,1)，插入新记录(1,2,3)和(4,8,2)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;注意：ON DUPLICATE KEY UPDATE只是MySQL的特有语法，并不是SQL标准语法！&lt;/p&gt;&lt;p&gt;如果您指定了&lt;span&gt;ON DUPLICATE KEY UPDATE&lt;/span&gt;，并且插入行后会导致在一个&lt;span&gt;UNIQUE&lt;/span&gt;索引或&lt;span&gt;PRIMARY KEY&lt;/span&gt;中出现重复值，则执行旧行&lt;span&gt;UPDATE&lt;/span&gt;。例如，如果列&lt;span&gt;a&lt;/span&gt;被定义为&lt;span&gt;UNIQUE&lt;/span&gt;，并且包含值&lt;span&gt;1&lt;/span&gt;，则以下两个语句具有相同的效果：&lt;/p&gt;&lt;pre&gt;&lt;span&gt;mysql&amp;gt; &lt;span&gt;&lt;b&gt;INSERT INTO table (a,b,c) VALUES (1,2,3)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; &lt;span&gt;&lt;b&gt;ON DUPLICATE KEY UPDATE c=c+1;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span&gt;mysql&amp;gt; &lt;span&gt;&lt;b&gt;UPDATE table SET c=c+1 WHERE a=1;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;如果行作为新记录被插入，则受影响行的值为&lt;span&gt;1&lt;/span&gt;；如果原有的记录被更新，则受影响行的值为&lt;span&gt;2&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;注释：如果列&lt;span&gt;b&lt;/span&gt;也是唯一列，则&lt;span&gt;INSERT&lt;/span&gt;与此&lt;span&gt;UPDATE&lt;/span&gt;语句相当：&lt;/p&gt;&lt;pre&gt;&lt;span&gt;mysql&amp;gt; &lt;span&gt;&lt;b&gt;UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;如果&lt;span&gt;&lt;span&gt;a=1 OR b=2&lt;/span&gt;与多个行向匹配，则只有一个行被更新。通常，您应该尽量避免对带有多个唯一关键字的表使用&lt;span&gt;ON DUPLICATE KEY&lt;/span&gt;子句。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;您可以在&lt;span&gt;UPDATE&lt;/span&gt;子句中使用&lt;span&gt;VALUES(col_name)&lt;/span&gt;函数从&lt;span&gt;INSERT...UPDATE&lt;/span&gt;语句的&lt;span&gt;INSERT&lt;/span&gt;部分引用列值。换句话说，如果没有发生重复关键字冲突，则&lt;span&gt;UPDATE&lt;/span&gt;子句中的&lt;span&gt;&lt;span&gt;VALUES(&lt;i&gt;col_name&lt;/i&gt;)&lt;/span&gt;可以引用被插入的&lt;i&gt;&lt;span&gt;col_name&lt;/span&gt;&lt;/i&gt;的值。本函数特别适用于多行插入。&lt;span&gt;VALUES()&lt;/span&gt;函数只在&lt;span&gt;INSERT...UPDATE&lt;/span&gt;语句中有意义，其它时候会返回&lt;span&gt;NULL&lt;/span&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;示例：&lt;/p&gt;&lt;pre&gt;&lt;span&gt;mysql&amp;gt; &lt;span&gt;&lt;b&gt;INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; &lt;span&gt;&lt;b&gt;ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;本语句与以下两个语句作用相同：&lt;/p&gt;&lt;pre&gt;&lt;span&gt;mysql&amp;gt; &lt;span&gt;&lt;b&gt;INSERT INTO table (a,b,c) VALUES (1,2,3)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; &lt;span&gt;&lt;b&gt;ON DUPLICATE KEY UPDATE c=3;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span&gt;mysql&amp;gt; &lt;span&gt;&lt;b&gt;INSERT INTO table (a,b,c) VALUES (4,5,6)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; &lt;span&gt;&lt;b&gt;ON DUPLICATE KEY UPDATE c=9;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;当您使用&lt;span&gt;ON DUPLICATE KEY UPDATE&lt;/span&gt;时，&lt;span&gt;DELAYED&lt;/span&gt;选项被忽略。&lt;/p&gt;&lt;p&gt;您可以使用&lt;span&gt;SQL LAST_INSERT_ID()&lt;/span&gt;函数查找用于&lt;span&gt;AUTO_INCREMENT&lt;/span&gt;列的值。从&lt;span&gt;C API&lt;/span&gt;的内部，使用&lt;span&gt;mysql_insert_id()&lt;/span&gt;函数。不过，您应该注意，两个函数的作用并不总是相同的。在&lt;a title=&quot;12.9.3.&amp;nbsp;Information Functions&quot; href=&quot;http://dev.mysql.com/doc/refman/5.1/zh/functions.html#information-functions&quot;&gt;12.9.3节，&amp;ldquo;信息函数&amp;rdquo;&lt;/a&gt;和&lt;a title=&quot;25.2.3.36.&amp;nbsp;mysql_insert_id()&quot; href=&quot;http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-insert-id&quot;&gt;25.2.3.36节，&amp;ldquo;mysql_insert_id()&amp;rdquo;&lt;/a&gt;中进一步讨论了与&lt;span&gt;AUTO_INCREMENT&lt;/span&gt;列有关的&lt;span&gt;INSERT&lt;/span&gt;语&lt;/p&gt;</description><pubDate>Tue, 18 Dec 2012 13:56:51 +0800</pubDate></item><item><title>php 的webservice类库NuSoap实现web中wsdl应用</title><link>https://www.snuday.com/post/951.html</link><description>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-family: Arial; font-size: 14px; line-height: 26px; &quot;&gt;&amp;nbsp;NuSOAP&amp;nbsp;是&amp;nbsp;PHP&amp;nbsp;环境下的&amp;nbsp;WEB&amp;nbsp;服务编程工具，用于创建或调用&amp;nbsp;WEB&amp;nbsp;服务。它是一个开源软件，当前版本是&amp;nbsp;0.9.5&amp;nbsp;，支持&amp;nbsp;SOAP1.1&amp;nbsp;、&amp;nbsp;WSDL1.1&amp;nbsp;，可以与其他支持&amp;nbsp;SOAP1.1&amp;nbsp;和&amp;nbsp;WSDL1.1&amp;nbsp;的系统互操作。&amp;nbsp;NuSOAP&amp;nbsp;完全由PHP语言编写，由一系列&amp;nbsp;PHP&amp;nbsp;类组成，不需要扩展库的支持，这种特性使得&amp;nbsp;NuSOAP&amp;nbsp;可以用于所有的&amp;nbsp;PHP&amp;nbsp;环境，不受服务器安全设置的影响。&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;h1 style=&quot;margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; &quot;&gt;&lt;a name=&quot;t0&quot; style=&quot;color: rgb(255, 153, 0); &quot;&gt;&lt;/a&gt;&amp;nbsp;&lt;/h1&gt;&lt;h1 style=&quot;margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; &quot;&gt;&lt;a name=&quot;t1&quot; style=&quot;color: rgb(255, 153, 0); &quot;&gt;&lt;/a&gt;1.&amp;nbsp;NuSOAP&amp;nbsp;的获取和安装&amp;nbsp;&lt;/h1&gt;&lt;p style=&quot;margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; &quot;&gt;NuSOAP&amp;nbsp;项目建立在&amp;nbsp;SourceForge&amp;nbsp;上，网络地址是：&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; &quot;&gt;&lt;a href=&quot;http://sourceforge.net/projects/nusoap/&quot; style=&quot;color: rgb(255, 153, 0); text-decoration: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 102, 41); &quot;&gt;http://sourceforge.net/projects/nusoap/&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; &quot;&gt;&lt;a href=&quot;http://sourceforge.net/projects/nusoap/files/nusoap/&quot; style=&quot;color: rgb(255, 153, 0); text-decoration: none; &quot;&gt;http://sourceforge.net/projects/nusoap/files/nusoap/&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; &quot;&gt;或&amp;nbsp;&lt;a href=&quot;http://dietrich.ganx4.com/nusoap&quot; style=&quot;color: rgb(255, 153, 0); text-decoration: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 153, 0); &quot;&gt;http://dietrich.ganx4.com/nusoap&lt;/span&gt;&lt;/a&gt;，这里，&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; &quot;&gt;可以下载到&amp;nbsp;NuSOAP&amp;nbsp;的最新的版本。&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; &quot;&gt;NuSOAP&amp;nbsp;的安装比较简单，把下载的&amp;nbsp;NuSOAP&amp;nbsp;的文件拷贝到服务器上，可以放在独立的目录里，也可以与程序代码放在相同的目录里，只要你的&amp;nbsp;PHP&amp;nbsp;代码能够访问到这些文件就可以了。&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; &quot;&gt;本文的测试环境基于&amp;nbsp;PHP5.2.6&amp;nbsp;和&amp;nbsp;NuSOAP&amp;nbsp;0.9.5&amp;nbsp;版本，&amp;nbsp;NuSOAP&amp;nbsp;安装在&amp;nbsp;WEB&amp;nbsp;目录&amp;ldquo;&amp;nbsp;/nusoap&amp;nbsp;&amp;rdquo;里，有两个子目录，&amp;nbsp;lib&amp;nbsp;和&amp;nbsp;samples&amp;nbsp;。其中，&amp;nbsp;lib&amp;nbsp;目录下存放&amp;nbsp;NuSOAP&amp;nbsp;的所有源代码文件，&amp;nbsp;samples&amp;nbsp;目录下是NuSOAP开发小组提供一些的例子。测试文件存放在&amp;nbsp;WEB&amp;nbsp;目录&amp;ldquo;&amp;nbsp;/nusoap&amp;nbsp;&amp;rdquo;里。&amp;nbsp;&lt;/p&gt;&lt;h1 style=&quot;margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; &quot;&gt;&lt;a name=&quot;t2&quot; style=&quot;color: rgb(255, 153, 0); &quot;&gt;&lt;/a&gt;&amp;nbsp;&lt;/h1&gt;&lt;h1 style=&quot;margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; &quot;&gt;&lt;a name=&quot;t3&quot; style=&quot;color: rgb(255, 153, 0); &quot;&gt;&lt;/a&gt;2.&amp;nbsp;NuSOAP&amp;nbsp;的使用&amp;nbsp;&lt;/h1&gt;&lt;p style=&quot;margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; &quot;&gt;NuSOAP&amp;nbsp;由一&amp;nbsp;PHP&amp;nbsp;的类组成，其中最常用到的是类soap_server和类soalclient。类soap_server&amp;nbsp;用于创建&amp;nbsp;WEB&amp;nbsp;服务，类soapclient在访问WEB服务时会用到。&amp;nbsp;&lt;/p&gt;&lt;h2 style=&quot;margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; &quot;&gt;&lt;a name=&quot;t4&quot; style=&quot;color: rgb(255, 153, 0); &quot;&gt;&lt;/a&gt;2.1&amp;nbsp;一个简单的例子：&amp;nbsp;Hello&amp;nbsp;World&amp;nbsp;&lt;/h2&gt;&lt;p style=&quot;margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; &quot;&gt;这个例子将利用&amp;nbsp;NuSOAP&amp;nbsp;创建一个简单的&amp;nbsp;WEB&amp;nbsp;服务，并利用&amp;nbsp;NuSOAP&amp;nbsp;创建一个客户端程序，调用这个服务。这个服务唯一的功能就是向客户端返回一个字符串&amp;ldquo;&amp;nbsp;Hello&amp;nbsp;World&amp;nbsp;&amp;rdquo;。首先，创建&amp;nbsp;WEB&amp;nbsp;服务程序代码文件&amp;ldquo;&amp;nbsp;/nusoap/nusoap_server1.php&amp;nbsp;&amp;rdquo;：&amp;nbsp;&lt;/p&gt;&lt;pre style=&quot;white-space: pre-wrap; word-wrap: break-word; font-size: 14px; line-height: 26px; &quot;&gt;&amp;nbsp;&lt;div class=&quot;dp-highlighter bg_php&quot; style=&quot;font-family: Consolas, &#039;Courier New&#039;, Courier, mono, serif; font-size: 12px; background-color: rgb(231, 229, 220); width: 1117.699951171875px; overflow: auto; padding-top: 1px; margin: 18px 0px !important; &quot;&gt;&lt;div class=&quot;bar&quot; style=&quot;padding-left: 45px; &quot;&gt;&lt;div class=&quot;tools&quot; style=&quot;padding: 3px 8px 10px 10px; font-size: 9px; line-height: normal; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; color: silver; background-color: rgb(248, 248, 248); border-left-width: 3px; border-left-style: solid; border-left-color: rgb(108, 226, 108); &quot;&gt;&lt;b&gt;[php]&lt;/b&gt; &lt;a href=&quot;http://blog.csdn.net/21aspnet/article/details/6933289#&quot; class=&quot;ViewSource&quot; title=&quot;view plain&quot; style=&quot;color: rgb(160, 160, 160); text-decoration: none; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); background-color: inherit; border: none; padding: 1px; margin: 0px 10px 0px 0px; font-size: 9px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; &quot;&gt;view plain&lt;/a&gt;&lt;a href=&quot;\download/2012/12/201212111744530543.gif); background-color: inherit; border: none; padding: 1px; margin: 0px 10px 0px 0px; font-size: 9px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; &quot;&gt;copy&lt;/a&gt;&lt;div style=&quot;position: absolute; left: 378px; top: 1031px; width: 18px; height: 18px; z-index: 99; &quot;&gt;&lt;embed id=&quot;ZeroClipboardMovie_1&quot; src=&quot;http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf&quot; loop=&quot;false&quot; menu=&quot;false&quot; quality=&quot;best&quot; bgcolor=&quot;#ffffff&quot; width=&quot;18&quot; height=&quot;18&quot; name=&quot;ZeroClipboardMovie_1&quot; align=&quot;middle&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; flashvars=&quot;id=1&amp;amp;width=18&amp;amp;height=18&quot; wmode=&quot;transparent&quot;&gt;&lt;/embed&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol start=&quot;1&quot; class=&quot;dp-c&quot; style=&quot;margin: 0px 0px 1px 45px !important; padding: 0px; border: none; list-style-position: initial; list-style-image: initial; background-color: rgb(255, 255, 255); color: rgb(92, 92, 92); &quot;&gt;&lt;li class=&quot;alt&quot; style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;&lt;span class=&quot;comment&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; &quot;&gt;//把&amp;nbsp;NuSOAP&amp;nbsp;的源文件包含到当前的代码文件里&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;&amp;lt;?php&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;alt&quot; style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color:&lt;br/&gt;inherit; &quot;&gt;&lt;span class=&quot;keyword&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold; &quot;&gt;require_once&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;(&lt;/span&gt;&lt;span class=&quot;string&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: blue; background-color: inherit; &quot;&gt;&amp;quot;lib/nusoap.php&amp;quot;&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;&lt;span class=&quot;comment&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; &quot;&gt;//定义服务程序&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;alt&quot; style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;&lt;span class=&quot;keyword&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold; &quot;&gt;function&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;&amp;nbsp;hello()&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;keyword&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold; &quot;&gt;return&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;string&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: blue; background-color: inherit; &quot;&gt;&#039;Hello&amp;nbsp;World!&#039;&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;alt&quot; style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;&lt;span class=&quot;comment&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; &quot;&gt;//初始化服务对象&amp;nbsp;,&amp;nbsp;这个对象是类&amp;nbsp;soap_server&amp;nbsp;的一个实例&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;alt&quot; style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;&lt;span class=&quot;vars&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(221, 0, 0); background-color: inherit; &quot;&gt;$soap&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold; &quot;&gt;new&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;&amp;nbsp;soap_server;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;&lt;span class=&quot;comment&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; &quot;&gt;//调用服务对象的&amp;nbsp;register&amp;nbsp;方法注册需要被客户端访问的程序。&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;alt&quot; style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;&lt;span class=&quot;comment&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; &quot;&gt;//只有注册过的程序，才能被远程客户端访问到。&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;&lt;span class=&quot;vars&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(221, 0, 0); background-color: inherit; &quot;&gt;$soap&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;-&amp;gt;register(&lt;/span&gt;&lt;span class=&quot;string&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: blue; background-color: inherit; &quot;&gt;&#039;hello&#039;&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;alt&quot; style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;&lt;span class=&quot;comment&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; &quot;&gt;//最后一步，把客户端通过&amp;nbsp;post&amp;nbsp;方式提交的数据，传递给服务对象的&amp;nbsp;service&amp;nbsp;方法。&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; background-color: inherit; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); line-height: 18px; &quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: none; color: black; background-color: inherit; &quot;&gt;&lt;span class=&quot;comment&quot; style=&quot;margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); background-color: inherit; &quot;&gt;//service&amp;nbsp;方法处理输&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;</description><pubDate>Tue, 11 Dec 2012 17:36:46 +0800</pubDate></item><item><title>git命令一栏表,很完整哦~~</title><link>https://www.snuday.com/post/474.html</link><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img title=&quot;&quot; alt=&quot;&quot; src=&quot;https://www.snuday.com/download/2012/12/git命令.png&quot; onload=&quot;ResizeImage(this,520)&quot; /&gt;&lt;/p&gt;&lt;br/&gt;</description><pubDate>Wed, 05 Dec 2012 09:56:11 +0800</pubDate></item><item><title>linux screen 命令详解 - [linux]</title><link>https://www.snuday.com/post/472.html</link><description>&lt;p&gt;&lt;strong&gt;功能说明： &lt;/strong&gt;&lt;br /&gt;使用telnet或SSH远程登录linux时，如果连接非正常中断，重新连接时，系统将开一个 新的session，无法恢复原来的  session.screen命令可以解决这个问题。Screen工具是一个终端多路转接器，在本质上，这意味着你能够使用一个单一的终端窗口运行多终端 的应用。&lt;br /&gt;&lt;strong&gt;语　　法：&lt;/strong&gt;&lt;br /&gt;screen [-AmRvx -ls -wipe][-d &amp;lt;作业名称&amp;gt;][-h &amp;lt;行数&amp;gt;][-r &amp;lt;作业名称&amp;gt;][-s ][-S &amp;lt;作业名称&amp;gt;]&lt;br /&gt;&lt;strong&gt;补充说明：&lt;/strong&gt;&lt;br /&gt;screen为多重视窗管理程序。此处所谓的视窗，是指一个全屏幕的文字模式画面。通常只有在使用telnet登入主机或是使用老式的终端机时，才有可能用到screen程序。&lt;br /&gt;&lt;strong&gt;参　　数：&lt;/strong&gt;&lt;br /&gt;-A 　将所有的视窗都调整为目前终端机的大小。&lt;br /&gt;-d &amp;lt;作业名称&amp;gt; 　将指定的screen作业离线。&lt;br /&gt;-h &amp;lt;行数&amp;gt; 　指定视窗的缓冲区行数。&lt;br /&gt;-m 　即使目前已在作业中的screen作业，仍强制建立新的screen作业。&lt;br /&gt;-r &amp;lt;作业名称&amp;gt; 　恢复离线的screen作业。&lt;br /&gt;-R 　先试图恢复离线的作业。若找不到离线的作业，即建立新的screen作业。&lt;br /&gt;-s 　指定建立新视窗时，所要执行的shell。&lt;br /&gt;-S &amp;lt;作业名称&amp;gt; 　指定screen作业的名称。&lt;br /&gt;-v 　显示版本信息。&lt;br /&gt;-x 　恢复之前离线的screen作业。&lt;br /&gt;-ls或--list 　显示目前所有的screen作业。&lt;br /&gt;-wipe 　检查目前所有的screen作业，并删除已经无法使用的screen作业。&lt;br /&gt;&lt;strong&gt;常用screen参数：&lt;/strong&gt;&lt;br /&gt;screen -S yourname -&amp;gt; 新建一个叫yourname的session&lt;br /&gt;screen -ls -&amp;gt; 列出当前所有的session&lt;br /&gt;screen -r yourname -&amp;gt; 回到yourname这个session&lt;br /&gt;screen -d yourname -&amp;gt; 远程detach某个session&lt;br /&gt;screen -d -r yourname -&amp;gt; 结束当前session并回到yourname这个session&lt;br /&gt;&lt;strong&gt;在每个screen session 下，所有命令都以 ctrl+a(C-a) 开始。&lt;/strong&gt;&lt;br /&gt;C-a ? -&amp;gt; Help，显示简单说明&lt;br /&gt;C-a c -&amp;gt; Create，开启新的 window&lt;br /&gt;C-a n -&amp;gt; Next，切换到下个 window &lt;br /&gt;C-a p -&amp;gt; Previous，前一个 window &lt;br /&gt;C-a 0..9 -&amp;gt; 切换到第 0..9 个window&lt;br /&gt;Ctrl+a [Space] -&amp;gt; 由視窗0循序換到視窗9&lt;br /&gt;C-a C-a -&amp;gt; 在两个最近使用的 window 间切换 &lt;br /&gt;C-a x -&amp;gt; 锁住当前的 window，需用用户密码解锁&lt;br /&gt;C-a  d -&amp;gt; detach，暂时离开当前session，将目前的 screen session (可能含有多个 windows)  丢到后台执行，并会回到还没进 screen 时的状态，此时在 screen session 里&amp;nbsp;&amp;nbsp;&amp;nbsp; 每个 window 内运行的  process (无论是前台/后台)都在继续执行，即使 logout 也不影响。 &lt;br /&gt;C-a z -&amp;gt; 把当前session放到后台执行，用 shell 的 fg 命令則可回去。&lt;br /&gt;C-a w -&amp;gt; Windows，列出已开启的 windows 有那些 &lt;br /&gt;C-a t -&amp;gt; Time，显示当前时间，和系统的 load &lt;br /&gt;C-a K -&amp;gt; kill window，强行关闭当前的 window&lt;br /&gt;C-a [ -&amp;gt; 进入 copy mode，在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; C-b Backward，PageUp &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; C-f Forward，PageDown &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; H(大写) High，将光标移至左上角 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; L Low，将光标移至左下角 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 移到行首 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ 行末 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; w forward one word，以字为单位往前移 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b backward one word，以字为单位往后移 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Space 第一次按为标记区起点，第二次按为终点 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Esc 结束 copy mode &lt;br /&gt;C-a ] -&amp;gt; Paste，把刚刚在 copy mode 选定的内容贴上&lt;br /&gt;--End--&lt;/p&gt;&lt;br/&gt;</description><pubDate>Wed, 21 Nov 2012 17:39:11 +0800</pubDate></item><item><title>LINUX命令行下如何附带参数运行PHP脚本实例详解</title><link>https://www.snuday.com/post/471.html</link><description>&lt;p&gt;&lt;strong&gt;参考手册：&lt;a href=&quot;http://www.php.net/manual/zh/features.commandline.php&quot; rel=&quot;nofollow&quot;&gt;http://www.php.net/manual/zh/features.commandline.php&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;可执行文件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 所有的PHP发行版，不论是编译自源代码的版本还是预创建的版本，都在默认情况下带有一个PHP可执行文件。这个可执行文件可以被用来运行命令行的PHP程序。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 要在你的系统上找到这个可执行文件，就要遵照下面的步骤：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在Windows操作系统里，它被放在PHP主安装目录下，文件名是php.exe或者（在老版本的PHP里）是php-cli.exe。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在Linux操作系统里，它被保存在PHP安装目录的bin/子目录下。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 不论是在哪一个操作系统里，你都需要对它进行测试，以保证它能够正常运行，方法是用-v参数调用它：&lt;/p&gt;&lt;p&gt;shell&amp;gt; /path/to/php -v&lt;br /&gt;PHP 5.0.0 (cli) (built: Jun 1 2005 18:32:10)&lt;br /&gt;Copyright (c) 1997-2004 The PHP Group&lt;br /&gt;Zend Engine v2.0.0, Copyright (c) 1998-2004 Zend Technologies&lt;/p&gt;&lt;p&gt;它应该会返回PHP的版本号。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一个简单的PHP CLI程序&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一旦找到了这个CLI可执行文件，你就可以用一个简单的程序来使用一下。创建一个简单的文本文件，其中包含有以下PHP代码，并把它保存为hello.php：&lt;/p&gt;&lt;p&gt;&amp;lt;?php&lt;br /&gt;echo &amp;quot;Hello from the CLI&amp;quot;;&lt;br /&gt;?&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 现在，试着在命令行提示符下运行这个程序，方法是调用CLI可执行文件并提供脚本的文件名：&lt;/p&gt;&lt;p&gt;shell&amp;gt; /path/to/phphello.php&lt;br /&gt;Hello from the CLI&lt;/p&gt;&lt;p&gt;&lt;strong&gt;使用标准的输入和输出&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PHP CLI会定义三个常量，以便让在命令行提示符下与解释器进行交互操作更加容易。这些常量见表格A。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;表格A&lt;/strong&gt;&lt;/p&gt;&lt;table width=&quot;231&quot; border=&quot;1&quot; style=&quot;width:231px; height:103px&quot;&gt;    &lt;tbody&gt;        &lt;tr&gt;            &lt;td width=&quot;16%&quot;&gt;常量&lt;/td&gt;            &lt;td width=&quot;84%&quot;&gt;说明&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;STDIN&lt;/td&gt;            &lt;td&gt;标准的输入设备&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;STDOUT&lt;/td&gt;            &lt;td&gt;标准的输出设备&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;STDERR&lt;/td&gt;            &lt;td&gt;标准的错误设备&lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 你可以在自己的PHP脚本里使用这三个常量，以接受用户的输入，或者显示处理和计算的结果。要更好地理解这一点，可以看看下面的脚本（列表A）：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;列表A&lt;/strong&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;// ask for input&lt;br /&gt;fwrite(STDOUT, &amp;quot;Enter your name: &amp;quot;);&lt;/p&gt;&lt;p&gt;// get input&lt;br /&gt;$name = trim(fgets(STDIN));&lt;/p&gt;&lt;p&gt;// write input back&lt;br /&gt;fwrite(STDOUT, &amp;quot;Hello, $name!&amp;quot;);&lt;br /&gt;?&amp;gt; &lt;br /&gt;Look what happens when you run it:&lt;br /&gt;shell&amp;gt; /path/to/phphello.php&lt;br /&gt;Enter your name: Joe&lt;br /&gt;Hello, Joe!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在这个脚本里，fwrite()函数首先会向标准的输出设备写一条消息，询问用户的姓名。然后它会把从标准输入设备获得的用户输入信息读取到一个PHP变量里，并它把合并成为一个字符串。然后就用fwrite()把这个字符串打印输出到标准的输出设备上。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;使用命令行自变量&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在命令行里输入程序参数来更改其运行方式是很常见的做法。你也可以对CLI程序这样做。PHP  CLI带有两个特殊的变量，专门用来达到这个目的：一个是$argv变量，它通过命令行把传递给PHP脚本的参数保存为单独的数组元素；另一个 是$argc变量，它用来保存$argv数组里元素的个数。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 用PHP脚本编写一段读取$argv并处理它所含参数的代码是很简单的。试试列表B里的示例脚本，看看它是如何工作的：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;列表B&lt;/strong&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;print_r($argv);&lt;br /&gt;?&amp;gt;&lt;/p&gt;&lt;p&gt;Run this script by passing it some arbitrary values, and check the output:&lt;/p&gt;&lt;p&gt;shell&amp;gt; /path/to/phptest.php chocolate 276 &amp;quot;killer tie, dude!&amp;quot;&lt;br /&gt;Array&lt;br /&gt;( [0] =&amp;gt; test.php&lt;br /&gt;[1] =&amp;gt; chocolate&lt;br /&gt;[2] =&amp;gt; 276&lt;br /&gt;[3] =&amp;gt; killer tie, dude!&lt;br /&gt;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 正如你可以从输出的结果看到的，传递给test.php的值会自动地作为数组元素出现在$argv里。要注意的是，$argvis的第一个自变量总是脚本自己的名称。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 下面是一个更加复杂的例子（列表C）：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;列表C&lt;/strong&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;// check for all required arguments&lt;br /&gt;// first argument is always name of script!&lt;br /&gt;if ($argc != 4) {&lt;br /&gt;die(&amp;quot;Usage: book.php &amp;lt;check-in-date&amp;gt; &amp;lt;num-nights&amp;gt; &amp;lt;room-type&amp;gt; &amp;quot;);&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;// remove first argument&lt;br /&gt;array_shift($argv);&lt;/p&gt;&lt;p&gt;// get and use remaining arguments&lt;br /&gt;$checkin = $argv[0];&lt;br /&gt;$nights = $argv[1];&lt;br /&gt;$type = $argv[2];&lt;br /&gt;echo &amp;quot;You have requested a $type room for $nights nights, checking in on $checkin. Thank you for your order! &amp;quot;;&lt;br /&gt;?&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 下面是其用法的示例：&lt;/p&gt;&lt;p&gt;shell&amp;gt; /path/to/phpbook.php 21/05/2005 7 single&lt;br /&gt;You have requested a single room for 7 nights, checking in on 21/05/2005. Thank you for your order!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在这里，脚本首先会检查$argc，以确保自变量的数量符合要求。它然后会从$argv里提取出每一个自变量，把它们打印输出到标准的输出设备上。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;em&gt; 注意：你可以用&lt;/em&gt;&lt;a href=&quot;http://www.melonfire.com/community/columns/trog/article.php?id=259&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;&lt;span style=&quot;color:#006da3&quot;&gt;Console_Getopt&lt;/span&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; PEAR类向PHP增加更加复杂的命令行参数。&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;使用CLI参数&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 除了用命令行传递PHP脚本参数，你还可以传递PHP CLI参数以更改其工作方式。表格B就是一些重要参数的列表：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;表格B&lt;/strong&gt;&lt;/p&gt;&lt;table width=&quot;42%&quot; border=&quot;1&quot;&gt;    &lt;tbody&gt;        &lt;tr&gt;            &lt;td width=&quot;14%&quot;&gt;参数&lt;/td&gt;            &lt;td width=&quot;86%&quot;&gt;说明&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;-a&lt;/td&gt;            &lt;td&gt;交互式运行Run interactively&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;-c&lt;/td&gt;            &lt;td&gt;path 从path读取php的.ini文件&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;-n&lt;/td&gt;            &lt;td&gt;不用读取php的.ini文件就直接运行&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;-m&lt;/td&gt;            &lt;td&gt;列出经过编译的模块&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;-i&lt;/td&gt;            &lt;td&gt;显示有关PHP构建的信息&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;-l&lt;/td&gt;            &lt;td&gt;检查PHP脚本的句法&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td height=&quot;23&quot;&gt;-s&lt;/td&gt;            &lt;td&gt;以彩色方式显示源代码&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;-w&lt;/td&gt;            &lt;td&gt;显示去掉注释之后的源代码&lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td height=&quot;20&quot;&gt;-h&lt;/td&gt;            &lt;td&gt;显示帮助&lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;交互模式&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 你还可以以交互方式使用PHP CLI，也就是输入命令，马上获得结果。要得到这种效果，只需要使用一个参数调用CLI可执行文件就行了，就像下面这样：&lt;/p&gt;&lt;p&gt;shell&amp;gt; /path/to/php -a&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 你会看到一个空行，你可以在里面输入PHP代码。看看：&lt;/p&gt;&lt;p&gt;shell&amp;gt; /path/to/php -a&lt;br /&gt;Interactive mode enabled&lt;br /&gt;&amp;lt;?php&lt;br /&gt;echo mktime();&lt;br /&gt;1121187283&lt;br /&gt;echo 2+2;&lt;br /&gt;4&lt;br /&gt;exit();&lt;br /&gt;shell&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 或者，你可以不使用-a参数就调用CLI可执行文件，直接输入完整的脚本或者代码段。用&amp;lt;Ctrl&amp;gt;-D来结束代码段，并让CLI来执行它。见下面的例子：&lt;/p&gt;&lt;p&gt;shell&amp;gt; /path/to/php&lt;br /&gt;&amp;lt;?php&lt;br /&gt;ech&lt;br/&gt;o date(&amp;quot;d-M-Y h:i:s&amp;quot;, time());&lt;br /&gt;?&amp;gt;&lt;br /&gt;&amp;lt;Ctrl-D&amp;gt;&lt;br /&gt;12-Jul-2005 06:54:04 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这就是PHP的命令行，现在你应该已经对PHP CLI有了足够的了解，并开始使用它了。&lt;/p&gt;&lt;br/&gt;</description><pubDate>Wed, 21 Nov 2012 17:33:54 +0800</pubDate></item><item><title>使用TCMalloc优化Nginx和mysql增强服务器高并发负载能力</title><link>https://www.snuday.com/post/470.html</link><description>&lt;p&gt;使用TCMalloc优化Nginx和mysql增强服务器高并发负载能力&lt;/p&gt;&lt;p&gt;TCMalloc(Thread-Caching Malloc)是google开发的开源工具──&amp;ldquo;google-perftools&amp;rdquo;中的成员。与标准的glibc库的malloc相比，TCMalloc在内存的分配上效率和速度要高得多，可以在很大程度上提高MySQL服务器在高并发情况下的性能，降低系统负载。&lt;/p&gt;&lt;p&gt;1、什么是TCMalloc?&lt;/p&gt;&lt;p&gt;TCMalloc意思是线程缓存的malloc。TCMalloc(Thread-Caching Malloc)是google开发的开源工具──&amp;ldquo;google-perftools&amp;rdquo;中的成员。与标准的glibc库的malloc相比，TCMalloc在内存的分配上效率和速度要高得多，可以在很大程度上提高服务器在高并发情况下的性能，降低系统负载。&lt;/p&gt;&lt;p&gt;2、TCMalloc安装&lt;/p&gt;&lt;p&gt;为MySQL添加TCMalloc库的安装步骤(Linux环境)：&lt;/p&gt;&lt;p&gt;1、64位操作系统请先安装 libunwind库，32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能，其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。&lt;/p&gt;&lt;p&gt;01&lt;br /&gt;wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz&lt;br /&gt;02&lt;br /&gt;&lt;br /&gt;03&lt;br /&gt;tar zxvf libunwind-0.99-alpha.tar.gz&lt;br /&gt;04&lt;br /&gt;&lt;br /&gt;05&lt;br /&gt;cd libunwind-0.99-alpha/&lt;br /&gt;06&lt;br /&gt;&lt;br /&gt;07&lt;br /&gt;CFLAGS=-fPIC ./configure&lt;br /&gt;08&lt;br /&gt;&lt;br /&gt;09&lt;br /&gt;make CFLAGS=-fPIC&lt;br /&gt;10&lt;br /&gt;&lt;br /&gt;11&lt;br /&gt;make CFLAGS=-fPIC install&lt;br /&gt;2、安装google-perftools：&lt;/p&gt;&lt;p&gt;01&lt;br /&gt;wget http://google-perftools.googlecode.com/files/google-perftools-0.97.tar.gz&lt;br /&gt;02&lt;br /&gt;&lt;br /&gt;03&lt;br /&gt;tar zxvf google-perftools-0.97.tar.gz&lt;br /&gt;04&lt;br /&gt;&lt;br /&gt;05&lt;br /&gt;cd google-perftools-0.97/&lt;br /&gt;06&lt;br /&gt;&lt;br /&gt;07&lt;br /&gt;./configure&lt;br /&gt;08&lt;br /&gt;&lt;br /&gt;09&lt;br /&gt;make &amp;amp;&amp;amp; make install&lt;br /&gt;10&lt;br /&gt;&lt;br /&gt;11&lt;br /&gt;echo &amp;quot;/usr/local/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/usr_local_lib.conf&lt;br /&gt;12&lt;br /&gt;&lt;br /&gt;13&lt;br /&gt;/sbin/ldconfig&lt;/p&gt;&lt;p&gt;注意：如果是64位系统，编译参数改为：./configure &amp;ndash;enable-frame-pointers&lt;/p&gt;&lt;p&gt;3、设置并更新动态连接库&lt;/p&gt;&lt;p&gt;echo &amp;quot;/usr/local/lib&amp;quot; &amp;gt; /etc/ld.so.conf.d/usr-local-lib.conf&lt;/p&gt;&lt;p&gt;ldconfig&lt;/p&gt;&lt;p&gt;4、 MYSQL 和NGINX 编译配置&lt;/p&gt;&lt;p&gt;Nginx编译配置&lt;/p&gt;&lt;p&gt;./configure &amp;ndash;with-http_stub_status_module &amp;ndash;with-google_perftools_module 其他的也可以自己添加嘛。&lt;/p&gt;&lt;p&gt;新建目录：/tmp/tcmalloc，赋予755权限。&lt;/p&gt;&lt;p&gt;google_perftools_profiles /tmp/tcmalloc; 在nginx 主配置nginx.conf worker_rlimit_nofile 添加此行&lt;/p&gt;&lt;p&gt;重点在mysql的编译问题：&lt;/p&gt;&lt;p&gt;mysql编译可能加载不上TCMalloc，&lt;/p&gt;&lt;p&gt;1)、一种方法：直接编译TCMalloc进mysql&lt;/p&gt;&lt;p&gt;./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-assembler --with-mysqld-ldflags=-all-static --with-mysqld-ldflags=-ltcmalloc --with-charset=utf8 --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile&lt;/p&gt;&lt;p&gt;2)、第二方法：去掉静态编译参数，&lt;/p&gt;&lt;p&gt;--with-mysqld-ldflags=-all-static ，在相关文件中添加TCMalloc加载项&lt;/p&gt;&lt;p&gt;./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-assembler --with-charset=utf8 --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile&lt;/p&gt;&lt;p&gt;然后：&lt;/p&gt;&lt;p&gt;sudo vi /usr/local/web/mysql/bin/mysqld_safe&lt;/p&gt;&lt;p&gt;#在：# executing mysqld_safe下加入以下&lt;/p&gt;&lt;p&gt;export LD_PRELOAD=/usr/local/lib/libtcmalloc.so&lt;/p&gt;&lt;p&gt;最后重启下Nginx和Mysql&lt;/p&gt;&lt;p&gt;lsof -n | grep tcmalloc&lt;/p&gt;&lt;p&gt;如果显示以下说明OK，&lt;/p&gt;&lt;p&gt;root@wehefei:/home/jincon/lnmp1.0.2/nginx-1.0.15# lsof | grep tcmalloc&lt;/p&gt;&lt;p&gt;mysqld 20047 mysql mem REG 104,17 1902881 9048380 /usr/local/lib/libtcmalloc.so.0.2.2&lt;/p&gt;&lt;p&gt;nginx 23726 www 9w REG 104,17 0 14418049 /tmp/tcmalloc.23726&lt;/p&gt;&lt;p&gt;nginx 23727 www 11w REG 104,17 0 14418050 /tmp/tcmalloc.23727&lt;/p&gt;&lt;p&gt;nginx 23728 www 13w REG 104,17 0 14418052 /tmp/tcmalloc.23728&lt;/p&gt;&lt;p&gt;nginx 23729 www 15w REG 104,17 0 14418051 /tmp/tcmalloc.23729&lt;/p&gt;&lt;p&gt;包子的Nginx开启了四个进程，注意下。&lt;/p&gt;&lt;br/&gt;</description><pubDate>Fri, 02 Nov 2012 10:16:11 +0800</pubDate></item><item><title>wget 批量下载网站目录下的文件</title><link>https://www.snuday.com/post/469.html</link><description>&lt;p&gt;今天整了一下ddnas，但是几次更新都出问题，于是准备在diavps上搞过镜像，自己搭建一个openwrt源。执行如下命令就会自动下载http://downloads.openwrt.org/snapshots/trunk/kirkwood/packages/下面的所有文件：&lt;/p&gt;&lt;p&gt;wget -nd -r -l1 --no-parent http://downloads.openwrt.org/snapshots/trunk/kirkwood/packages/&lt;/p&gt;&lt;p&gt;注：-nd 不创建目录；-r 递归下载；-l1只下载当前目录下的文件；&amp;ndash;no-parent 不下载父目录中的文件。&lt;/p&gt;&lt;p&gt;如果想指定下载制定后缀的文件，如只下载http://downloads.openwrt.org/snapshots/trunk/kirkwood/packages/下.ipk文件和.gz文件：&lt;/p&gt;&lt;p&gt;wget -nd -r -l1 --no-parent -A.ipk -A.gz http://downloads.openwrt.org/snapshots/trunk/kirkwood/packages/&lt;/p&gt;&lt;p&gt;搞好后，更换源，再opkg update恢复正常&lt;/p&gt;&lt;p&gt;下载网站目录下的除html 之外的文件和目录，且不遵守robots.txt的限制。&lt;/p&gt;&lt;p&gt;wget -c -r -np -k -L --reject=html http://mirrors.rit.edu/rpi/images/ -e robots=off&lt;/p&gt;&lt;br/&gt;</description><pubDate>Thu, 01 Nov 2012 13:55:24 +0800</pubDate></item><item><title>推荐一款好用的客户端测试web服务器性能的工具</title><link>https://www.snuday.com/post/468.html</link><description>&lt;p&gt;自动化测试Web服务器性能 autobench+httperf (2010-03-29 23:49)&lt;br /&gt;分类： 网络应用与开发&lt;br /&gt;整理这个主要是为学员的项目需要。我希望学员能自行做一个支持GET的简单WEB服务器，能用各种方法优化其下载性能，需要一个能直观了解性能工具以分析程序是否改进。因此 查到资料 autobench+httpref 组合来测试HTTP服务器性能。我只是现在将资料整理一下，按照自己习惯格式边做边整理一下。&lt;br /&gt;1.HTTPerf单独使用&lt;br /&gt;HP实验室出的命令行HTTP性能测试工具&lt;br /&gt;&amp;bull; 主页: http://www.hpl.hp.com/research/linux/httperf/&lt;br /&gt;&amp;bull; 下载: http://httperf.googlecode.com/files/httperf-0.9.0.tar.gz&lt;br /&gt;&amp;bull; 解压:&lt;br /&gt;o tar xvzf httperf-0.9.0.tar.gz&lt;br /&gt;o cd httperf-0.9.0&lt;br /&gt;&amp;bull; 生成Makefile&lt;br /&gt;o ./configure&lt;br /&gt;&amp;bull; 编译 make&lt;br /&gt;&amp;bull; 安装 make install&lt;br /&gt;httpref是通过命令行来调用。它有如下参数&lt;br /&gt;httperf --help Usage: httperf [-hdvV] [--add-header S] [--burst-length N] [--client N/N] [--close-with-reset] [--debug N] [--failure-status N] [--help] [--hog] [--http-version S] [--max-connections N] [--max-piped-calls N] [--method S] [--no-host-hdr] [--num-calls N] [--num-conns N] [--period [d|u|e]T1[,T2]] [--port N] [--print-reply [header|body]] [--print-request [header|body]] [--rate X] [--recv-buffer N] [--retry-on-failure] [--send-buffer N] [--server S] [--server-name S] [--session-cookies] [--ssl] [--ssl-ciphers L] [--ssl-no-reuse] [--think-timeout X] [--timeout X] [--uri S] [--verbose] [--version] [--wlog y|n,file] [--wsess N,N,X] [--wsesslog N,X,file] [--wset N,X]&lt;br /&gt;其中常用的参数的含义&lt;br /&gt;&amp;bull; --server S web服务器地址&lt;br /&gt;&amp;bull; --num-conns N 测试联接数&lt;br /&gt;&amp;bull; --num-calls N 每连接中发起联接数，一般是1&lt;br /&gt;&amp;bull; --rate N 每秒请求数&lt;br /&gt;&amp;bull; --port N 测试端口&lt;br /&gt;&amp;bull; &amp;minus;&amp;minus;method S 测试HTTP方法，默认为GET&lt;br /&gt;&amp;bull; --uri S 测试网页，默认为/&lt;br /&gt;&amp;bull; --timeout N 等待服务器响应时间&lt;br /&gt;测试本地嵌入式Web 服务器 BOA性能.&lt;br /&gt;httperf --server 127.0.0.1 --port 8080 --num-conns 200 --timeout 5 --uri /index.html&lt;br /&gt;结果：&lt;br /&gt;httperf --timeout=5 --client=0/1 --server=127.0.0.1 --port=8080 --uri=/index.html --send-buffer=4096 --recv-buffer=16384 --num-conns=200 --num-calls=1 Maximum connect burst length: 1&lt;br /&gt;Total: connections 200 requests 200 replies 200 test-duration 2.184 s&lt;br /&gt;Connection rate: 91.6 conn/s (10.9 ms/conn, &amp;lt;=1 concurrent connections) Connection time [ms]: min 2.8 avg 10.9 max 1301.8 median 4.5 stddev 91.7 Connection time [ms]: connect 0.8 Connection length [replies/conn]: 1.000&lt;br /&gt;Request rate: 91.6 req/s (10.9 ms/req) Request size [B]: 72.0&lt;br /&gt;Reply rate [replies/s]: min 0.0 avg 0.0 max 0.0 stddev 0.0 (0 samples) Reply time [ms]: response 2.7 transfer 7.4 Reply size [B]: header 190.0 content 42605.0 footer 0.0 (total 42795.0) Reply status: 1xx=0 2xx=200 3xx=0 4xx=0 5xx=0&lt;br /&gt;CPU time [s]: user 0.00 system 0.18 (user 0.0% system 8.2% total 8.2%) Net I/O: 3832.9 KB/s (31.4*10^6 bps)&lt;br /&gt;Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0 Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0&lt;br /&gt;每次设置HTTPerf参数来测试实在麻烦，因此autobench就派上用场了。autobench是一个自动测试工具(用的是Perl脚本）,用它来调用httperf来测试，省事多了。在他的官网上，也强调与httperf的配合。&lt;br /&gt;2.HTTPerf+Autobench&lt;br /&gt;&amp;bull; 主页： http://www.xenoclast.org/autobench&lt;br /&gt;&amp;bull; 下载:http://www.xenoclast.org/autobench/downloads/autobench-2.1.2.tar.gz&lt;br /&gt;&amp;bull; 解压 tar xvzf autobench-2.1.2.tar.gz&lt;br /&gt;o cd cd autobench-2.1.2&lt;br /&gt;&amp;bull; 编译 make&lt;br /&gt;&amp;bull; 安装 make install&lt;br /&gt;安装时在我的机器上出现如下错误提示&lt;br /&gt;perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG = &amp;quot;en&amp;quot; are supported and installed on your system.&lt;br /&gt;这是perl 常见安装问题，我的解决方法是手工设定两个环境变量&lt;br /&gt;export LC_ALL=en_US&lt;br /&gt;export LANGUAGE=en_US&lt;br /&gt;autobench 调用httperf 方法,在其官网给出一些样例了。&lt;br /&gt;2.1单机测试模式&lt;br /&gt;测试单台主机,以下是官网样例 autobench --single_host --host1 www.test.com --uri1 /10K --quiet \ --low_rate 20 --high_rate 200 --rate_step 20 --num_call 10 \ --num_conn 5000 --timeout 5 --file results.tsv&lt;br /&gt;其参数含义&lt;br /&gt;&amp;bull; --signle_host 只测单机&lt;br /&gt;&amp;bull; --host1 测试主机地址&lt;br /&gt;&amp;bull; --uri1 host1 测试URI&lt;br /&gt;&amp;bull; --quiet 安静模式&lt;br /&gt;&amp;bull; --low_rate 测试时最低请求数(指 httperf)&lt;br /&gt;&amp;bull; --hight_rate 测试时最高请求数&lt;br /&gt;&amp;bull; --rate_step 每次测试请求数增加步长&lt;br /&gt;&amp;bull; --num-call 同httperf&lt;br /&gt;&amp;bull; --num_conn 同httperf&lt;br /&gt;&amp;bull; --file 测试结果输出的 tsv文件&lt;br /&gt;对boa 的进行自动测试。&lt;br /&gt;autobench --single_host --host1 127.0.0.1 --uri1 /index.html --port1 8080 --quiet --low_rate 20 --high_rate 200 --rate_step 20 --num_call 1 --num_conn 500 --timeout 5 --file results.tsv&lt;br /&gt;tsv文件应该是csv格式的,这是我的BOA测试结果&lt;br /&gt;dem_req_rate req_rate_127.0.0.1 con_rate_127.0.0.1 min_rep_rate_127.0.0.1 avg_rep_rate_127.0.0.1 max_rep_rate_127.0.0.1 stddev_rep_rate_127.0.0.1 resp_time_127.0.0.1 net_io_127.0.0.1 errors_127.0.0.1 20 20.0 20.0 20.0 20.0 20.0 0.0 15.1 838.8 0 40 39.8 39.8 40.0 40.0 40.0 0.0 25.2 1664.8 0 60 60.1 60.1 54.5 54.5 54.5 0.0 64.6 2515.5 0 80 64.6 64.6 51.6 51.6 51.6 0.0 587.5 2702.5 0 100 71.8 71.8 24.6 24.6 24.6 0.0 919.8 3007.3 0 120 67.4 67.4 23.8 23.8 23.8 0.0 1221.9 2822.0 0 140 68.0 68.0 25.2 25.2 25.2 0.0 1210.9 2845.7 0 160 79.9 79.9 10.8 10.8 10.8 0.0 1485.2 3346.1 0 180 63.1 63.1 1.4 1.4 1.4 0.0 1629.4 2640.4 0 200 67.3 67.3 1.4 1.4 1.4 0.0 2785.8 2810.9 0.200400801603206&lt;br /&gt;2.2 双机测试模式&lt;br /&gt;autobench 还能做两机对比测试,这样可以在同等网络条件下，测试两台服务器性能。它主要用增加几个参数&lt;br /&gt;关掉 --single_host参数，增加 --host2 --uri2 --port2 几个参数即可。&lt;br /&gt;tsv格式还是不直观，如果输出图形结果，将更加有直观。autobench建议用gnuplot来输出相应图形.一个科学绘图图形包。&lt;br /&gt;3.输出测试图形&lt;br /&gt;3.1 失败结果(autobech与最新版不兼容）&lt;br /&gt;&amp;bull; 官网:http://www.gnuplot.info&lt;br /&gt;&amp;bull; 下载:http://downloads.sourceforge.net/project/gnuplot/gnuplot/4.4.0/gnuplot-4.4.0.tar.gz?use_mirror=nchc&lt;br /&gt;&amp;bull; 解压 tar xvzf gnuplot-4.4.0.tar.gz&lt;br /&gt;o cd gnuplot-4.4.0&lt;br /&gt;&amp;bull; 这个包时间非常新，因此要把系统时间调准点。&lt;br /&gt;tar: gnuplot-4.4.0/lisp: time stamp 2010-03-14 05:28:45 is 983592 s in the future tar: gnuplot-4.4.0: time stamp 2010-03-14 05:28:44 is 983591 s in the future&lt;br /&gt;&amp;bull; 生成Makefile ./configure&lt;br /&gt;&amp;bull; 编译 make&lt;br /&gt;&amp;bull; 安装 make install&lt;br /&gt;autobench 使用 bench2graph来生成图形。&lt;br /&gt;执行 bench2graph results.tsv results.png 按网上提示生成bench2png.（直接执行bench2graph 无法生成PNG）&lt;br /&gt;&amp;bull; cp /usr/local/bin/bench2graph /usr/local/bin/bench2png&lt;br /&gt;&amp;bull; sed -i &#039;s/postscript color/png xffffff/g&#039; /usr/local/bin/bench2png&lt;br /&gt;去掉 bench2png 的77行的 echo set data style linespoints &amp;gt;&amp;gt; gnuplot.cmd&lt;br /&gt;因为4.4版本不支持 set data style 选项提示&lt;br /&gt;set data style linespoints ^ &amp;quot;gnuplot.cmd&amp;quot;, line 6: Unrecognized option. See &#039;help set&#039;.&lt;br /&gt;生成输出图形 bench2png results.tsv results.png&lt;br /&gt;这个图没有曲线？感觉不对换成网上显示成功的gnuplot-4.2.0&lt;br /&gt;3.2 成功的版本&lt;br /&gt;&amp;bull; 解压 tar xvzf gnuplot-4.2.0.tar.gz&lt;br /&gt;&amp;bull; cd gnuplot-4.2.0&lt;br /&gt;&amp;bull; 生成Makefile ./configure&lt;br /&gt;&amp;bull; 编译 make&lt;br /&gt;&amp;bull; 安装 make install&lt;br /&gt;cp /usr/local/bin/bench2graph /usr/local/bin/bench2png&lt;br /&gt;sed -i &#039;s/postscript color/png xffffff/g&#039; /usr/local/bin/bench2png&lt;br /&gt;注意这里一定要打开echo set data style linespoints &amp;gt;&amp;gt; gnuplot.cmd&lt;br /&gt;b&lt;br/&gt;ench2png results.tsv results.png&lt;br /&gt;生成结果&lt;/p&gt;&lt;p&gt;百度文库说明地址：&lt;a href=&quot;http://wenku.baidu.com/view/dcb6683d87c24028915fc33e.html&quot;&gt;http://wenku.baidu.com/view/dcb6683d87c24028915fc33e.html&lt;/a&gt;&lt;/p&gt;&lt;br/&gt;</description><pubDate>Tue, 30 Oct 2012 14:39:25 +0800</pubDate></item><item><title>png图片生成透明背景处理方法</title><link>https://www.snuday.com/post/467.html</link><description>&lt;p&gt;&amp;lt;?php&lt;/p&gt;&lt;p&gt;//创建透明画布&lt;/p&gt;&lt;p&gt;&amp;nbsp;$im_out =imagecreatetruecolor($imgcreat_x, $imgcreat_y);&lt;/p&gt;&lt;p&gt;&amp;nbsp;imagealphablending($im_out, true);&lt;/p&gt;&lt;p&gt;&amp;nbsp;imagesavealpha($im_out, true);&lt;/p&gt;&lt;p&gt;$trans_colour = imagecolorallocatealpha($im_out, 0, 0, 0, 127);&lt;/p&gt;&lt;p&gt;&amp;nbsp;imagefill($im_out, 0, 0, $trans_colour);&lt;/p&gt;&lt;p&gt;ImageCopyResized($im_out, $im, 0,0, 0, 0, $img_x, $img_y, $img[0], $img[1]);&lt;/p&gt;&lt;p&gt;&amp;nbsp;imagepng($im_out);&lt;/p&gt;&lt;p&gt;?&amp;gt; &lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;br/&gt;</description><pubDate>Thu, 25 Oct 2012 14:43:42 +0800</pubDate></item><item><title>利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统</title><link>https://www.snuday.com/post/466.html</link><description>&lt;p&gt;&lt;br /&gt;&lt;a href=&quot;\download/2012/10/201210231400325070.gif&quot;&gt;&lt;img border=&quot;0&quot; title=&quot;点击在新窗口中浏览此图片&quot; alt=&quot;点击在新窗口中浏览此图片&quot; class=&quot;insertimage&quot; src=&quot;\download/2012/10/201210231400320082.gif&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;br /&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.1978th.net/tokyotyrant/&quot;&gt;Tokyo Tyrant&lt;/a&gt; 是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议，也可以通过HTTP协议进行数据交换。&lt;br /&gt;&lt;br /&gt;Tokyo Tyrant 加上 Tokyo Cabinet，构成了一款支持高并发的分布式持久存储系统，对任何原有Memcached客户端来讲，可以将Tokyo Tyrant看成是一个Memcached，但是，它的数据是可以持久存储的。这一点，跟新浪的&lt;a target=&quot;_blank&quot; href=&quot;http://memcachedb.org/&quot;&gt;Memcachedb&lt;/a&gt;性质一样。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;相比Memcachedb而言，Tokyo Tyrant具有以下优势：&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1、故障转移：Tokyo Tyrant支持双机互为主辅模式，主辅库均可读写，而Memcachedb目前支持类似MySQL主辅库同步的方式实现读写分离，支持&amp;ldquo;主服务器可读写、辅助服务器只读&amp;rdquo;模式。&lt;br /&gt;&lt;br /&gt;&lt;a target=&quot;_blank&quot; href=&quot;\download/2012/10/201210231400371265.gif&quot;&gt;&lt;img border=&quot;0&quot; title=&quot;点击在新窗口中浏览此图片&quot; alt=&quot;点击在新窗口中浏览此图片&quot; class=&quot;insertimage&quot; src=&quot;\download/2012/10/201210231400371265.gif&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;这里使用 $memcache-&amp;gt;addServer 而不是 $memcache-&amp;gt;connect 去连接 Tokyo Tyrant  服务器，是因为当 Memcache 客户端使用 addServer 服务器池时，是根据&amp;ldquo;crc32(key) %  current_server_num&amp;rdquo;哈希算法将 key 哈希到不同的服务器的，PHP、C 和 python  的客户端都是如此的算法。Memcache 客户端的 addserver 具有故障转移机制，当 addserver 了2台 Memcached  服务器，而其中1台宕机了，那么 current_server_num 会由原先的2变成1。&lt;br /&gt;&lt;br /&gt;引用 memcached 官方网站和 PHP 手册中的两段话：&lt;/p&gt;&lt;div class=&quot;quote&quot;&gt;&lt;div class=&quot;quote-title&quot;&gt;引用&lt;/div&gt;&lt;div class=&quot;quote-content&quot;&gt;\download/2012/10/201210231400378160.gif&quot;&gt;&lt;img border=&quot;0&quot; title=&quot;点击在新窗口中浏览此图片&quot; alt=&quot;点击在新窗口中浏览此图片&quot; class=&quot;insertimage&quot; src=&quot;\download/2012/10/201210231400396730.gif&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;但是，Tokyo Tyrant 也有缺点：&lt;span style=&quot;color: #FF0000;&quot;&gt;在32位操作系统下，作为 Tokyo Tyrant 后端存储的 Tokyo Cabinet 数据库单个文件不能超过2G，而64位操作系统则不受这一限制。&lt;/span&gt;所以，如果使用 Tokyo Tyrant，推荐在64位CPU、操作系统上安装运行。&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;一、安装&lt;/strong&gt;&lt;br /&gt;1、首先编译安装tokyocabinet数据库&lt;/p&gt;&lt;div style=&quot;border-left: 0px dashed #D6C094; margin: 5px; padding: 3px; margin-bottom:0px; border: 1px dashed #00a0c6; background-color: #ffffff;&quot;&gt;wget &lt;a target=&quot;_blank&quot; href=&quot;http://www.1978th.net/tokyocabinet/tokyocabinet-1.4.45.tar.gz&quot;&gt;http://fallabs.com/tokyocabinet/tokyocabinet-1.4.48.tar.gz&lt;/a&gt;&lt;br /&gt;tar zxvf tokyocabinet-1.4.45.tar.gz&lt;br /&gt;cd tokyocabinet-1.4.45/&lt;br /&gt;./configure&lt;br /&gt;#注：在32位Linux操作系统上编译Tokyo cabinet，请使用./configure --enable-off64代替./configure，可以使数据库文件突破2GB的限制。&lt;br /&gt;#./configure --enable-off64&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ../&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;2、然后编译安装tokyotyrant&lt;/p&gt;&lt;div style=&quot;border-left: 0px dashed #D6C094; margin: 5px; padding: 3px; margin-bottom:0px; border: 1px dashed #00a0c6; background-color: #ffffff;&quot;&gt;wget &lt;a target=&quot;_blank&quot; href=&quot;http://www.1978th.net/tokyotyrant/tokyotyrant-1.1.40.tar.gz&quot;&gt;http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz&lt;/a&gt;&lt;br /&gt;tar zxvf tokyotyrant-1.1.40.tar.gz&lt;br /&gt;cd tokyotyrant-1.1.40/&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;cd ../&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;二、配置&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;1、创建tokyotyrant数据文件存放目录&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;border-left: 0px dashed #D6C094; margin: 5px; padding: 3px; margin-bottom:0px; border: 1px dashed #00a0c6; background-color: #ffffff;&quot;&gt;mkdir -p /ttserver/&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2、启动tokyotyrant的主进程（ttserver）&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;(1)、单机模式&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;border-left: 0px dashed #D6C094; margin: 5px; padding: 3px; margin-bottom:0px; border: 1px dashed #00a0c6; background-color: #ffffff;&quot;&gt;ulimit -SHn 51200&lt;br /&gt;ttserver  -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid  -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts  /ttserver/ttserver.rts  /ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=10000000&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;(2)、双机互为主辅模式&lt;/strong&gt;&lt;br /&gt;服务器192.168.1.91：&lt;/p&gt;&lt;div style=&quot;border-left: 0px dashed #D6C094; margin: 5px; padding: 3px; margin-bottom:0px; border: 1px dashed #00a0c6; background-color: #ffffff;&quot;&gt;ulimit -SHn 51200&lt;br /&gt;ttserver  -host 192.168.1.91 -port 11211 -thnum 8 -dmn -pid  /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/  -ulim 128m -sid 91 -mhost 192.168.1.92 -mport 11211 -rts  /ttserver/ttserver.rts  /ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=10000000&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;服务器192.168.1.92：&lt;/p&gt;&lt;div style=&quot;border-left: 0px dashed #D6C094; margin: 5px; padding: 3px; margin-bottom:0px; border: 1px dashed #00a0c6; background-color: #ffffff;&quot;&gt;ulimit -SHn 51200&lt;br /&gt;ttserver  -host 192.168.1.92 -port 11211 -thnum 8 -dmn -pid  /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/  -ulim 128m -sid 92 -mhost 192.168.1.91 -mport 11211 -rts  /ttserver/ttserver.rts  /ttserver/database.tcb#lmemb=1024#nmemb=2048#bnum=10000000&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;(3)、参数说明&lt;/strong&gt;&lt;br /&gt;ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid  path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num]  [-mhost name] [-mport num] [-rts path] [dbname] &lt;br /&gt;&lt;br /&gt;-host name : 指定需要绑定的服务器域名或IP地址。默认绑定这台服务器上的所有IP地址。&lt;br /&gt;-port num : 指定需要绑定的端口号。默认端口号为1978 &lt;br /&gt;-thnum num : 指定线程数。默认为8个线程。 &lt;br /&gt;-tout num : 指定每个会话的超时时间（单位为秒）。默认永不超时。 &lt;br /&gt;-dmn : 以守护进程方式运行。&lt;br /&gt;-pid path : 输出进程ID到指定文件（这里指定文件名）。&lt;br /&gt;-log path : 输出日志信息到指定文件（这里指定文件名）。&lt;br /&gt;-ld : 在日志文件中还记录DEBUG调试信息。&lt;br /&gt;-le : 在日志文件中仅记录错误信息。&lt;br /&gt;-ulog path : 指定同步日志文件存放路径（这里指定目录名）。&lt;br /&gt;-ulim num : 指定每个同步日志文件的大小（例如128m）。&lt;br /&gt;-uas : 使用异步IO记录更新日志（使用此项会减少磁盘IO消耗，但是数据会先放在内存中，不会立即写入磁盘，如果重启服务器或ttserver进程被kill掉，将导致部分数据丢失。一般情况下不建议使用）。&lt;br /&gt;-sid num : 指定服务器ID号（当使用主辅模式时，每台ttserver需要不同的ID号） &lt;br /&gt;-mhost name : 指定主辅同步模式下，主服务器的域名或IP地址。&lt;br /&gt;-mport num : 指定主辅同步模式下，主服务器的端口号。&lt;br /&gt;-rts path : 指定用来存放同步时间戳的文件名。&lt;br /&gt;&lt;br /&gt;如果使用的是哈希数据库，可以指定参数&amp;ldquo;#bnum=xxx&amp;rdquo;来提高性能。它可以指定bucket存储桶的数量。例如指定&amp;ldquo;#bnum=1000000&amp;rdquo;，就可以将最新最热的100万条记录缓存在内存中：&lt;/p&gt;&lt;div style=&quot;border-left: 0px dashed #D6C094; margin: 5px; padding: 3px; margin-bottom:0px; border: 1px dashed #00a0c6; background-color: #ffffff;&quot;&gt;ttserver  -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid  -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts  /ttserver/ttserver.rts /ttserver/database.tch#bnum=1000000&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;如果大量的客户端访问ttserver，请确保文件描述符够用。许多服务器的默认文件描述&lt;/div&gt;&lt;/div&gt;</description><pubDate>Tue, 23 Oct 2012 13:57:40 +0800</pubDate></item></channel></rss>