<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>云端听海 &#039;s blog</title>
	<atom:link href="http://www.think168.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.think168.net</link>
	<description>当不能再骄傲地活着时，就骄傲地死去！</description>
	<lastBuildDate>Tue, 04 Jan 2011 04:17:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>2010年年度总结</title>
		<link>http://www.think168.net/2010/2010-annual-summary/</link>
		<comments>http://www.think168.net/2010/2010-annual-summary/#comments</comments>
		<pubDate>Fri, 31 Dec 2010 14:41:08 +0000</pubDate>
		<dc:creator>jun_kool</dc:creator>
				<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://www.think168.net/?p=314</guid>
		<description><![CDATA[还有不到两个小时，2010年就永远成为了过去。5月底到北京，离开了工作三年的公司，离开生活了五年的长沙来到首都加入北漂大军。到现在为止对北京的印象就是路上狗屎特别多，所以走路的时候要特别小心，屋里小强特别多，一不小心就踩死几只。]]></description>
			<content:encoded><![CDATA[<p>还有不到两个小时，2010年就永远成为了过去。5月底到北京，离开了工作三年的公司，离开生活了五年的长沙来到首都加入北漂大军。到现在为止对北京的印象就是路上狗屎特别多，所以走路的时候要特别小心，屋里小强特别多，一不小心就踩死几只。</p>
<p><span id="more-314"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.think168.net/2010/2010-annual-summary/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>【收藏】HTTP协议浅析(附HTTP协议中文版.PDF)</title>
		<link>http://www.think168.net/2010/analysis-of-http-protocol/</link>
		<comments>http://www.think168.net/2010/analysis-of-http-protocol/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 09:16:53 +0000</pubDate>
		<dc:creator>云端听海</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[理论知识]]></category>

		<guid isPermaLink="false">http://www.think168.net/?p=289</guid>
		<description><![CDATA[HTTP协议是什么？ 简单来说，就是一个基于应用层的通信规范：双方要进行通信，大家都要遵守一个规范，这个规范就是HTTP协议。 HTTP协议能做什么？ 很多人首先一定会想到：浏览网页。没错，浏览网页是HTTP的主要应用，但是这并不代表HTTP就只能应用于网页的浏览。HTTP是一种协议，只要通信的双方都遵守这个协议，HTTP就能有用武之地。比如咱们常用的QQ，迅雷这些软件，都会使用HTTP协议(还包括其他的协议)。 HTTP协议如何工作？ 大家都知道一般的通信流程：首先客户端发送一个请求(request)给服务器，服务器在接收到这个请求后将生成一个响应(response)返回给客户端。 在这个通信的过程中HTTP协议在以下4个方面做了规定： 1. Request和Response的格式 Request格式： HTTP请求行 （请求）头 空行 可选的消息体 注：请求行和标题必须以&#60;CR&#62;&#60;LF&#62; 作为结尾（也就是，回车然后换行）。空行内必须只有&#60;CR&#62;&#60;LF&#62;而无其他空格。在HTTP/1.1 协议中，所有的请求头，除Host外，都是可选的。 实例： GET / HTTP/1.1 Host: gpcuster.cnblogs.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive If-Modified-Since: Mon, 25 May 2009 03:19:18 GMT Response格式： HTTP状态行 （应答）头 空行 [...]]]></description>
			<content:encoded><![CDATA[<p>HTTP协议是什么？</p>
<p>简单来说，就是一个基于应用层的通信规范：双方要进行通信，大家都要遵守一个规范，这个规范就是HTTP协议。</p>
<p>HTTP协议能做什么？</p>
<p>很多人首先一定会想到：浏览网页。没错，浏览网页是HTTP的主要应用，但是这并不代表HTTP就只能应用于网页的浏览。HTTP是一种协议，只要通信的双方都遵守这个协议，HTTP就能有用武之地。比如咱们常用的QQ，迅雷这些软件，都会使用HTTP协议(还包括其他的协议)。</p>
<p>HTTP协议如何工作？</p>
<p>大家都知道一般的通信流程：首先客户端发送一个请求(request)给服务器，服务器在接收到这个请求后将生成一个响应(response)返回给客户端。</p>
<p>在这个通信的过程中HTTP协议在以下4个方面做了规定：</p>
<p><span id="more-289"></span></p>
<p><strong>1. </strong><strong>Request</strong><strong>和Response</strong><strong>的格式</strong></p>
<p>Request格式：</p>
<p>HTTP请求行<br />
（请求）头<br />
空行<br />
可选的消息体</p>
<p>注：请求行和标题必须以&lt;CR&gt;&lt;LF&gt; 作为结尾（也就是，回车然后换行）。空行内必须只有&lt;CR&gt;&lt;LF&gt;而无其他空格。在HTTP/1.1 协议中，所有的请求头，除Host外，都是可选的。</p>
<p>实例：</p>
<p>GET / HTTP/1.1</p>
<p>Host: gpcuster.cnblogs.com</p>
<p>User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10</p>
<p>Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</p>
<p>Accept-Language: en-us,en;q=0.5</p>
<p>Accept-Encoding: gzip,deflate</p>
<p>Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7</p>
<p>Keep-Alive: 300</p>
<p>Connection: keep-alive</p>
<p>If-Modified-Since: Mon, 25 May 2009 03:19:18 GMT</p>
<p>Response格式：</p>
<p>HTTP状态行<br />
（应答）头<br />
空行<br />
可选的消息体</p>
<p>实例：</p>
<p>HTTP/1.1 200 OK</p>
<p>Cache-Control: private, max-age=30</p>
<p>Content-Type: text/html; charset=utf-8</p>
<p>Content-Encoding: gzip</p>
<p>Expires: Mon, 25 May 2009 03:20:33 GMT</p>
<p>Last-Modified: Mon, 25 May 2009 03:20:03 GMT</p>
<p>Vary: Accept-Encoding</p>
<p>Server: Microsoft-IIS/7.0</p>
<p>X-AspNet-Version: 2.0.50727</p>
<p>X-Powered-By: ASP.NET</p>
<p>Date: Mon, 25 May 2009 03:20:02 GMT</p>
<p>Content-Length: 12173</p>
<p>消息体的内容（略）</p>
<p>详细的信息请参考：<a href="http://rfc.sunsite.dk/rfc/rfc2616.html">RFC 2616</a>。</p>
<p>关于HTTP headers的简要介绍，请查看：<a href="http://www.cs.tut.fi/~jkorpela/http.html">Quick reference to HTTP headers</a></p>
<p><strong>2. </strong><strong>建立连接的方式</strong></p>
<p>HTTP支持2中建立连接的方式：非持久连接和持久连接(HTTP1.1默认的连接方式为持久连接)。</p>
<p>1)  非持久连接</p>
<p>让我们查看一下非持久连接情况下从服务器到客户传送一个Web页面的步骤。假设该贝面由1个基本HTML文件和10个JPEG图像构成，而且所有这些对象都存放在同一台服务器主机中。再假设该基本HTML文件的URL为：gpcuster.cnblogs.com/index.html。</p>
<p>下面是具体步骡:</p>
<p>1.HTTP客户初始化一个与服务器主机gpcuster.cnblogs.com中的HTTP服务器的TCP连接。HTTP服务器使用默认端口号80监听来自HTTP客户的连接建立请求。</p>
<p>2.HTTP客户经由与TCP连接相关联的本地套接字发出—个HTTP请求消息。这个消息中包含路径名/somepath/index.html。</p>
<p>3.HTTP服务器经由与TCP连接相关联的本地套接字接收这个请求消息，再从服务器主机的内存或硬盘中取出对象/somepath/index.html，经由同一个套接字发出包含该对象的响应消息。</p>
<p>4.HTTP服务器告知TCP关闭这个TCP连接(不过TCP要到客户收到刚才这个响应消息之后才会真正终止这个连接)。</p>
<p>5.HTTP客户经由同一个套接字接收这个响应消息。TCP连接随后终止。该消息标明所封装的对象是一个HTML文件。客户从中取出这个文件，加以分析后发现其中有10个JPEG对象的引用。</p>
<p>6.给每一个引用到的JPEG对象重复步骡1-4。</p>
<p>上述步骤之所以称为使用非持久连接，原因是每次服务器发出一个对象后，相应的TCP连接就被关闭，也就是说每个连接都没有持续到可用于传送其他对象。每个TCP连接只用于传输一个请求消息和一个响应消息。就上述例子而言，用户每请求一次那个web页面，就产生11个TCP连接。</p>
<p>2)   持久连接</p>
<p>非持久连接有些缺点。首先，客户得为每个待请求的对象建立并维护一个新的连接。对于每个这样的连接，TCP得在客户端和服务器端分配TCP缓冲区，并维持TCP变量。对于有可能同时为来自数百个不同客户的请求提供服务的web服务器来说，这会严重增加其负担。其次，如前所述，每个对象都有2个RTT的响应延长——一个RTT用于建立TCP连接，另—个RTT用于请求和接收对象。最后，每个对象都遭受TCP缓启动，因为每个TCP连接都起始于缓启动阶段。不过并行TCP连接的使用能够部分减轻RTT延迟和缓启动延迟的影响。</p>
<p>在持久连接情况下，服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。整个Web页面(上例中为包含一个基本HTMLL文件和10个图像的页面)自不用说可以通过单个持久TCP连接发送:甚至存放在同一个服务器中的多个web页面也可以通过单个持久TCP连接发送。通常，HTTP服务器在某个连接闲置一段特定时间后关闭它，而这段时间通常是可以配置的。持久连接分为不带流水线(without pipelining)和带流水线(with pipelining)两个版本。如果是不带流水线的版本，那么客户只在收到前一个请求的响应后才发出新的请求。这种情况下，web页面所引用的每个对象(上例中的10个图像)都经历1个RTT的延迟，用于请求和接收该对象。与非持久连接2个RTT的延迟相比，不带流水线的持久连接已有所改善，不过带流水线的持久连接还能进一步降低响应延迟。不带流水线版本的另一个缺点是，服务器送出一个对象后开始等待下一个请求，而这个新请求却不能马上到达。这段时间服务器资源便闲置了。</p>
<p>HTTP/1.1的默认模式使用带流水线的持久连接。这种情况下，HTTP客户每碰到一个引用就立即发出一个请求，因而HTTP客户可以一个接一个紧挨着发出各个引用对象的请求。服务器收到这些请求后，也可以一个接一个紧挨着发出各个对象。如果所有的请求和响应都是紧挨着发送的，那么所有引用到的对象一共只经历1个RTT的延迟(而不是像不带流水线的版本那样，每个引用到的对象都各有1个RTT的延迟)。另外，带流水线的持久连接中服务器空等请求的时间比较少。与非持久连接相比，持久连接(不论是否带流水线)除降低了1个RTT的响应延迟外，缓启动延迟也比较小。其原因在于既然各个对象使用同一个TCP连接，服务器发出第一个对象后就不必再以一开始的缓慢速率发送后续对象。相反，服务器可以按照第一个对象发送完毕时的速率开始发送下一个对象。</p>
<p><strong>3. </strong><strong>缓存的机制</strong></p>
<p>HTTP/1.1中缓存的目的是为了在很多情况下减少发送请求，同时在许多情况下可以不需要发送完整响应。前者减少了网络回路的数量；HTTP利用一个“过期（expiration）”机制来为此目的。后者减少了网络应用的带宽；HTTP用“验证（validation）”机制来为此目的。</p>
<p>HTTP定义了3种缓存机制：</p>
<p>l <strong>Freshness</strong> allows a response to be used without re-checking it on the origin server, and can be controlled by both the server and the client. For example, the Expires response header gives a date when the document becomes stale, and the Cache-Control: max-age directive tells the cache how many seconds the response is fresh for.</p>
<p>l <strong>Validation</strong> can be used to check whether a cached response is still good after it becomes stale. For example, if the response has a Last-Modified header, a cache can make a <em>conditional request</em><em> </em>using the If-Modified-Since header to see if it has changed.</p>
<p>l <strong>Invalidation</strong> is usually a side effect of another request that passes through the cache. For example, if URL associated with a cached response subsequently gets a POST, PUT or DELETE request, the cached response will be invalidated.</p>
<p>关于web缓存方面的内容可以参考：Caching Tutorial for Web Authors and Webmasters（<a href="http://www.mnot.net/cache_docs" target="_blank">英文版</a>）（<a href="http://www.chedong.com/tech/cache_docs.html" target="_blank">中文版</a>）</p>
<p><strong>4. </strong><strong>响应授权激发机制</strong></p>
<p>这些机制能被用于服务器激发客户端请求并且使客户端授权。</p>
<p>详细的信息请参考：<a href="http://www.ietf.org/rfc/rfc2617.txt">RFC 2617: HTTP Authentication: Basic and Digest Access</a></p>
<p>例外还有一篇比较详细的文章  <a href="http://www.blogjava.net/redhatlinux/archive/2009/02/17/255109.html">http://www.blogjava.net/redhatlinux/archive/2009/02/17/255109.html</a></p>
<a class="downloadlink" href="http://think168.net/wp-content/plugins/download-monitor/download.php?id=HTTP%E5%8D%8F%E8%AE%AE%E4%B8%AD%E6%96%87%E7%89%88" title=" downloaded 380 times" >HTTP协议中文版 (380)</a>
]]></content:encoded>
			<wfw:commentRss>http://www.think168.net/2010/analysis-of-http-protocol/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HTML PHP JS 实现页面重定向</title>
		<link>http://www.think168.net/2010/html-php-js-achieve-redirect-page/</link>
		<comments>http://www.think168.net/2010/html-php-js-achieve-redirect-page/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 04:27:53 +0000</pubDate>
		<dc:creator>云端听海</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.think168.net/?p=281</guid>
		<description><![CDATA[HTML PHP 或 JAVASCRIPT]]></description>
			<content:encoded><![CDATA[<p>HTML</p>
<pre class="brush: xml; title: ; notranslate">&lt;meta HTTP-EQUIV=&quot;Refresh&quot; CONTENT=&quot;0&quot;; URL=&quot;index.php&quot;&gt;&lt;/meta&gt;</pre>
<p>PHP</p>
<pre class="brush: php; title: ; notranslate">header(&quot;Location: index.php&quot;);</pre>
<p>或</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
ob_start();
//html代码
ob_clean(); include(&quot;next.php&quot;); ob_end_flush();
?&gt;
</pre>
<p>JAVASCRIPT</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script&gt;window.location =&quot;index.php&quot;; &lt;/script&gt;
</pre>
<p><span id="more-281"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.think168.net/2010/html-php-js-achieve-redirect-page/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fastcgi优缺点总结</title>
		<link>http://www.think168.net/2010/fastcgi-summarize-the-advantages-and-disadvantages-php/</link>
		<comments>http://www.think168.net/2010/fastcgi-summarize-the-advantages-and-disadvantages-php/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 18:01:14 +0000</pubDate>
		<dc:creator>jun_kool</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[FastCgi]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[PHP配置]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.think168.net/?p=274</guid>
		<description><![CDATA[前几个去面试被问到一个问题 配置PHP环境时Fastcgi与模块化安装各自的优缺点?回来后在网上找了一些资料，做如下总结！ 如果想了解 FastCGI 的技术原理就要了解何为&#8221;短生存期应用程序&#8221;,何为&#8221;长生存期应用程序&#8221;。先从 CGI 技术开刀，以下是 CGI 技术的理论：每次当客户请求一个 CGI 的时候，Web 服务器就请求操作系统生成一个新的 CGI 进程。当 CGI 满足要求后，服务器就杀死这个进程。服务器对客户端的每个请求都要重复这样的过程。而 FastCGI 技术的理论为：FastCGI 程序一旦产生后，他可以持续工作,足够满足客户的请求直到被明确的终止。如果你希望通过协同处理来提高程序的性能，你可以请求 Web 服务器运行多个 FastCGI应用程序的副本。CGI 就是所谓的短生存期应用程序，FastCGI 就是所谓的长生存期应用程序。由于 FastCGI 程序并不需要不断的产生新进程，可以大大降低服务器的压力。并且产生较高的应用效率。 与CGI相比FastCgi具有以下特点： 1.打破传统页面处理技术 传统的页面处理技术，程序必须与 Web 服务器或 Application 服务器处于同一台服务器中。这种历史已经早 N 年被 FastCGI 技术所打破，FastCGI 技术的应用程序可以被安装在服务器群中的任何一台服务器，而通过 TCP/IP 协议与 Web 服务器通讯，这样做既适合开发大型分布式 Web 群，也适合高效数据库控制。 2.明确的请求模式 CGI 技术没有一个明确的角色，在 FastCGI 程序中，程序被赋予明确的角色（响应器角色、认证器角色、过滤器角色）。 3.合理的程序结构 起初，真的很讨厌 FastCGI 应用程序的结构要求。没关系，您经过一段时间编写后就会喜欢这种结构，只有这种完全规范的结构才能让您的程序更有效率。 然后是Fastcgi的优缺点。 Fastcgi的优点： [...]]]></description>
			<content:encoded><![CDATA[<p>前几个去面试被问到一个问题 配置PHP环境时Fastcgi与模块化安装各自的优缺点?回来后在网上找了一些资料，做如下总结！</p>
<p>如果想了解 FastCGI 的技术原理就要了解何为&#8221;短生存期应用程序&#8221;,何为&#8221;长生存期应用程序&#8221;。先从 CGI 技术开刀，以下是 CGI 技术的理论：每次当客户请求一个 CGI 的时候，Web 服务器就请求操作系统生成一个新的 CGI 进程。当 CGI 满足要求后，服务器就杀死这个进程。服务器对客户端的每个请求都要重复这样的过程。而 FastCGI 技术的理论为：FastCGI 程序一旦产生后，他可以持续工作,足够满足客户的请求直到被明确的终止。如果你希望通过协同处理来提高程序的性能，你可以请求 Web 服务器运行多个 FastCGI应用程序的副本。CGI 就是所谓的短生存期应用程序，FastCGI 就是所谓的长生存期应用程序。由于 FastCGI 程序并不需要不断的产生新进程，可以大大降低服务器的压力。并且产生较高的应用效率。</p>
<p><span id="more-274"></span> 与CGI相比FastCgi具有以下特点：<br />
1.打破传统页面处理技术<br />
传统的页面处理技术，程序必须与 Web 服务器或 Application 服务器处于同一台服务器中。这种历史已经早 N 年被 FastCGI 技术所打破，FastCGI 技术的应用程序可以被安装在服务器群中的任何一台服务器，而通过 TCP/IP 协议与 Web 服务器通讯，这样做既适合开发大型分布式 Web 群，也适合高效数据库控制。<br />
2.明确的请求模式<br />
CGI 技术没有一个明确的角色，在 FastCGI 程序中，程序被赋予明确的角色（响应器角色、认证器角色、过滤器角色）。<br />
3.合理的程序结构<br />
起初，真的很讨厌 FastCGI 应用程序的结构要求。没关系，您经过一段时间编写后就会喜欢这种结构，只有这种完全规范的结构才能让您的程序更有效率。</p>
<p>然后是Fastcgi的优缺点。<br />
Fastcgi的优点：<br />
1、高稳定性、fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑。<br />
2、良好的安全性、 fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮。<br />
2、高性能、 fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态IO处理完全不需要逻辑程序的参与。<br />
3、良好的扩展性、 fastcgi是一个中立的技术标准, 完全可以支持任何语言写的处理程序。</p>
<p>Fastcgi的缺点：<br />
1、对某些服务器的新版本支持不好，对分布式负载均衡没要求的模块化安装是否是更好的选择。<br />
2、目前的fastcgi和server沟通还不够智能,一个fastcgi进程如果执行时间过长会被当成是死进程杀掉重起,这样在处理长时间任务的时候很麻烦.这样做也使得fastcgi无法允许联机调试。<br />
3、SCGI等类似技术的都可以替换fastcgi, SCGI在python中很成功,功能完备,目前SCGI也开始支持rails了随着rails的流行,一个独立的mod_rails是可能出现的,而且ruby自身的webserver也开始涌现,以后极有可能自己搞一套东西连接主流的webserver.fastcgi设计的时候是想作common gatewayinterface(cgi)的,但是这个目标的现在看来已经不适合了。</p>
<p>模块化安装的优缺点暂时还没找到。</p>
<p>以上内容均摘自互联网！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.think168.net/2010/fastcgi-summarize-the-advantages-and-disadvantages-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP字符串函数整理</title>
		<link>http://www.think168.net/2010/php-string-functions-order/</link>
		<comments>http://www.think168.net/2010/php-string-functions-order/#comments</comments>
		<pubDate>Fri, 21 May 2010 03:30:30 +0000</pubDate>
		<dc:creator>云端听海</dc:creator>
				<category><![CDATA[学习]]></category>

		<guid isPermaLink="false">http://www.think168.net/?p=270</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<pre class="brush: php; title: ; notranslate">
AddSlashes  /**字符串加入斜线。**/

bin2hex  /**二进位转成十六进位。**/

Chop  /**去除连续空白。**/

Chr  /**返回序数值的字符。**/

chunk_split  /**将字符串分成小段。**/

convert_cyr_string  /**转换古斯拉夫字符串成其它字符串。**/

crypt  /**将字符串用 DES 编码加密。**/

echo  /**输出字符串。**/

explode  /**切开字符串。**/

flush  /**清出输出缓冲区。**/

get_meta_tags  /**抽出文件所有 meta 标记的资料。**/

htmlspecialchars  /**将特殊字符转成 HTML 格式。**/

htmlentities  /**将所有的字符都转成 HTML 字符串。**/

implode  /**将数组变成字符串。**/

join  /**将数组变成字符串。**/

ltrim  /**去除连续空白。**/

md5  /**计算字符串的 MD5 哈稀。**/

nl2br  /**将换行字符转成 &lt;br /&gt;。**/
</pre>
<p><span id="more-270"></span></p>
<pre class="brush: php; title: ; notranslate">
Ord  /**返回字符的序数值。**/

parse_str  /**解析 query 字符串成变量。**/

print  /**输出字符串。**/

printf  /**输出格式化字符串。**/

quoted_printable_decode  /**将 qp 编码字符串转成 8 位字符串。**/

QuoteMeta  /**加入引用符号。**/

rawurldecode  /**从 URL 专用格式字符串还原成普通字符串。**/

rawurlencode  /**将字符串编码成 URL 专用格式。**/

setlocale  /**配置地域化信息。**/

similar_text  /**计算字符串相似度。**/

soundex  /**计算字符串的读音值

sprintf  /**将字符串格式化。**/

strchr  /**寻找第一个出现的字符。**/

strcmp  /**字符串比较。**/

strcspn  /**不同字符串的长度。**/

strip_tags  /**去掉 HTML 及 PHP 的标记。**/

StripSlashes  /**去掉反斜线字符。**/

strlen  /**取得字符串长度。**/

strrpos  /**寻找字符串中某字符最后出现处。**/

strpos  /**寻找字符串中某字符最先出现处。**/

strrchr  /**取得某字符最后出现处起的字符串。**/

strrev  /**颠倒字符串。**/

strspn  /**找出某字符串落在另一字符串遮罩的数目。**/

strstr  /**返回字符串中某字符串开始处至结束的字符串。**/

strtok  /**切开字符串。**/

strtolower  /**字符串全转为小写。**/

strtoupper  /**字符串全转为大写。**/

str_replace  /**字符串取代。**/

strtr  /**转换某些字符。**/

substr  /**取部份字符串。**/

trim  /**截去字符串首尾的空格。**/

ucfirst  /**将字符串第一个字符改大写。**/

ucwords  /**将字符串每个字第一个字母改大写。**/
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.think168.net/2010/php-string-functions-order/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>php中的数组操作函数整理</title>
		<link>http://www.think168.net/2010/php-function-in-the-array-of-finishing-operations/</link>
		<comments>http://www.think168.net/2010/php-function-in-the-array-of-finishing-operations/#comments</comments>
		<pubDate>Thu, 20 May 2010 15:56:34 +0000</pubDate>
		<dc:creator>云端听海</dc:creator>
				<category><![CDATA[学习]]></category>

		<guid isPermaLink="false">http://www.think168.net/?p=267</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<pre class="brush: php; title: ; notranslate">
array_change_key_case   /** 返回字符串键名全为小写或大写的数组**/

array_chunk   /** 将一个数组分割成多个 **/

array_combine   /** 创建一个数组，用一个数组的值作为其键名，另一个数组的值作为其值 **/

array_count_values   /** 统计数组中所有的值出现的次数 **/

array_diff_assoc   /** 带索引检查计算数组的差集 **/

array_diff_key   /** 使用键名比较计算数组的差集 **/

array_diff_uassoc   /** 用用户提供的回调函数做索引检查来计算数组的差集 **/

array_diff_ukey   /** 用回调函数对键名比较计算数组的差集 **/

array_diff   /** 计算数组的差集 **/

array_fill   /** 用给定的值填充数组 **/

array_filter   /** 用回调函数过滤数组中的单元 **/

array_flip   /** 交换数组中的键和值 **/

array_intersect_assoc   /** 带索引检查计算数组的交集 **/
</pre>
<p><span id="more-267"></span></p>
<pre class="brush: php; title: ; notranslate">
array_intersect_key   /** 使用键名比较计算数组的交集 **/

array_intersect_uassoc   /** 带索引检查计算数组的交集，用回调函数比较索引 **/

array_intersect_ukey   /** 用回调函数比较键名来计算数组的交集 **/

array_intersect   /** 计算数组的交集 **/ 

array_key_exists   /** 检查给定的键名或索引是否存在于数组中 **/

array_keys   /** 返回数组中所有的键名 **/

array_map   /** 将回调函数作用到给定数组的单元上 **/

array_merge_recursive   /** 递归地合并一个或多个数组 **/

array_merge   /** 合并一个或多个数组 **/

array_multisort   /** 对多个数组或多维数组进行排序 **/

array_pad   /** 用值将数组填补到指定长度 **/

array_pop   /** 将数组最后一个单元弹出（出栈） **/

array_product   /** 计算数组中所有值的乘积 **/

array_push   /** 将一个或多个单元压入数组的末尾（入栈）**/ 

array_rand   /** 从数组中随机取出一个或多个单元 **/

array_reduce   /** 用回调函数迭代地将数组简化为单一的值 **/

array_reverse   /** 返回一个单元顺序相反的数组 **/

array_search   /** 在数组中搜索给定的值，如果成功则返回相应的键名 **/

array_shift   /** 将数组开头的单元移出数组 **/

array_slice   /** 从数组中取出一段 **/

array_splice   /** 把数组中的一部分去掉并用其它值取代 **/

array_sum   /** 计算数组中所有值的和 **/

array_udiff_assoc   /** 带索引检查计算数组的差集，用回调函数比较数据 **/

array_udiff_uassoc   /** 带索引检查计算数组的差集，用回调函数比较数据和索引 **/

array_udiff   /** 用回调函数比较数据来计算数组的差集 **/

array_uintersect_assoc   /** 带索引检查计算数组的交集，用回调函数比较数据 **/

array_uintersect_uassoc   /** 带索引检查计算数组的交集，用回调函数比较数据和索引 **/

array_uintersect   /** 计算数组的交集，用回调函数比较数据 **/

array_unique   /** 移除数组中重复的值 **/

array_unshift   /** 在数组开头插入一个或多个单元 **/

array_values   /** 返回数组中所有的值 **/

array_walk_recursive   /** 对数组中的每个成员递归地应用用户函数**/ 

array_walk   /** 对数组中的每个成员应用用户函数 **/

array   /** 新建一个数组 **/

arsort   /** 对数组进行逆向排序并保持索引关系 **/

asort   /** 对数组进行排序并保持索引关系 **/

compact   /** 建立一个数组，包括变量名和它们的值 **/

count  /**(sizeof)计算数组中的单元数目或对象中的属性个数 **/

current   /** 返回数组中的当前单元 **/

each   /** 返回数组中当前的键／值对并将数组指针向前移动一步 **/

end   /** 将数组的内部指针指向最后一个单元 **/

extract   /** 从数组中将变量导入到当前的符号表 **/

in_array   /** 检查数组中是否存在某个值 **/

key   /** 从关联数组中取得键名 **/

krsort   /** 对数组按照键名逆向排序 **/

ksort   /** 对数组按照键名排序 **/

list   /** 把数组中的值赋给一些变量 **/

natcasesort   /** 用“自然排序”算法对数组进行不区分大小写字母的排序 **/

natsort   /** 用“自然排序”算法对数组排序 **/

next   /** 将数组中的内部指针向前移动一位 **/

pos   /** current() 的别名 **/

prev   /** 将数组的内部指针倒回一位 **/

range   /** 建立一个包含指定范围单元的数组**/
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.think168.net/2010/php-function-in-the-array-of-finishing-operations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 CHM手册下载</title>
		<link>http://www.think168.net/2010/html5-chm-manual-download/</link>
		<comments>http://www.think168.net/2010/html5-chm-manual-download/#comments</comments>
		<pubDate>Wed, 19 May 2010 05:56:34 +0000</pubDate>
		<dc:creator>云端听海</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[学习]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[下载]]></category>

		<guid isPermaLink="false">http://www.think168.net/?p=259</guid>
		<description><![CDATA[HTML5草案的前身名为Web Applications 1.0。於2004年被WHATWG提出，於2007年被W3C接纳，并成立了新的HTML工作团队。在2008年1月22日，第一份正式草案已公布,预计将在2010年9月正式向公众推荐。WHATWG表示该规范是目前正在进行的工作，仍须多年的努力。 现在已经有一些网站开始支持HTML5了，比如一些国外的大站如YOUTUBE，无需FLASH就可以播放视频。 国内网易邮箱也开始支持HTML5，支持附件拖曳！ 所以我们有理由相信HTML5时代将很快到来! 在线文档http://www.w3school.com.cn/html5/index.asp CHM格式下载]]></description>
			<content:encoded><![CDATA[<p><strong>HTML5</strong>草案的前身名为Web Applications 1.0。於2004年被WHATWG提出，於2007年被W3C接纳，并成立了新的HTML工作团队。在2008年1月22日，第一份正式草案已公布,预计将在2010年9月正式向公众推荐。WHATWG表示该规范是目前正在进行的工作，仍须多年的努力。</p>
<p>现在已经有一些网站开始支持HTML5了，比如一些国外的大站如YOUTUBE，无需FLASH就可以播放视频。</p>
<p>国内网易邮箱也开始支持HTML5，支持附件拖曳！</p>
<p>所以我们有理由相信HTML5时代将很快到来!<span id="more-259"></span></p>
<p>在线文档<a href="http://www.w3school.com.cn/html5/index.asp">http://www.w3school.com.cn/html5/index.asp</a></p>
<p>CHM格式下载<br />
 <a class="downloadlink" href="http://think168.net/wp-content/plugins/download-monitor/download.php?id=HTM5+%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3" title="VersionHTM5 downloaded 519 times" >HTM5 帮助文档 (519)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.think168.net/2010/html5-chm-manual-download/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP Session机制解惑</title>
		<link>http://www.think168.net/2010/php-session-mechanism-and-application-of-article-collection/</link>
		<comments>http://www.think168.net/2010/php-session-mechanism-and-application-of-article-collection/#comments</comments>
		<pubDate>Wed, 12 May 2010 15:40:45 +0000</pubDate>
		<dc:creator>云端听海</dc:creator>
				<category><![CDATA[学习]]></category>

		<guid isPermaLink="false">http://www.think168.net/?p=253</guid>
		<description><![CDATA[虽然很多人已经能熟练使用Session,但不见得所有人对其原理都熟悉，下面推荐一篇不错的文章! 一、PHP SESSION原理 我们知道，session是在服务器端保持用户会话数据的一种方法，对应的cookie是在客户端保持用户数据。HTTP协议是一种无状态协议，服务器响应完之后就失去了与浏览器的联系，最早，Netscape将cookie引入浏览器，使得数据可以客户端跨页面交换，那么服务器是如何记住众多用户的会话数据呢？ 首先要将客户端和服务器端建立一一联系，每个客户端都得有一个唯一标识，这样服务器才能识别出来。建议唯一标识的方法有两种：cookie或者通过GET方式指定。默认配置的PHP使用session的时会建立一个名叫”PHPSESSID”的cookie（可以通过php.ini修改session.name值指定），如果客户端禁用cookie,你也可以指定通过GET方式把session id传到服务器（修改php.ini中session.use_trans_sid等参数）。 我们查看服务器端session.save_path目录会发现很多类似sess_vv9lpgf0nmkurgvkba1vbvj915这样的文件，这个其实就是session id “vv9lpgf0nmkurgvkba1vbvj915″对应的数据。 真相就在这里，客户端将session id传递到服务器，服务器根据session id找到对应的文件，读取的时候对文件内容进行反序列化就得到session的值，保存的时候先序列化再写入。 事实就是这样，所以如果服务器不支持session或者你想自定义session，完全可以DIY，通过PHP的uniqid生成永不重复的session id，然后找个地方存储session的内容即可，你也可以学flickr把session存储在MySQL数据库中。 二、使用session之前为什么必须先执行session_start()？ 了解的原理之后，所谓的session其实就是客户端一个session id服务器端一个session file，新建session之前执行session_start()是告诉服务器要种一个cookie以及准备好session文件，要不然你的session内容怎么存；读取session之前执行session_start()是告诉服务器，赶紧根据session id把session文件反序列化。 只有一个session函数可以在session_start()之前执行，session_name()：读取或指定session名称（比如默认的就是”PHPSESSID”），这个当然要在session_start之前执行。 三、session影响系统性能 session在大访问量网站上确实影响系统性能，影响性能的原因之一由文件系统设计造成，在同一个目录下超过10000个文件时，文件的定位将非常耗时，PHP支持session目录hash，我们可以通过修改php.ini中session.save_path = &#8221;2;/path/to/session/dir&#8221;，那么session将存储在两级子目录中，每个目录有16个子目录[0~f]，不过好像PHP session不支持创建目录，你需要事先把那么些目录创建好 。 还有一个问题就是小文件的效率问题，一般我们的session数据都不会太大（1～2K），如果有大量这样1～2K的文件在磁盘上，IO效率肯定会很差，PHP手册上建议使用Reiserfs文件系统，不过Reiserfs的前景堪忧，Reiserfs的作者把媳妇给杀了，SuSE也抛弃了Reiserfs。 其实还有很多中存储session的方式，可以通过php -i&#124;grep “Registered save handlers”查看，比如Registered save handlers =&#62; files user sqlite eaccelerator可以通过文件、用户、sqlite、eaccelerator来存，如果服务器装了memcached，还有会mmcache的选项。当然还有很多，比如MySQL、PostgreSQL等等。都是不错的选择。 四、session的同步 我们前端可能有很多台服务器，用户在A服务器上登录了，种下了session信息，然后访问网站的某些页面没准跳到B服务器上去了，如果这个时候B服务器上没有session信息又没有做特殊处理，可能就会出问题了。 session同步有很多种，如果你是存储在memcached或者MySQL中，那就很容易了，指定到同样的位置即可，如果是文件形式的，你可以用NFS统一存储。 还有一种方式是通过加密的cookie来实现，用户在A服务器上登录成功，在用户的浏览器上种上一个加密的cookie，当用户访问B服务器时，检查有无session，如果有当然没问题，如果没有，就去检验cookie是否有效，cookie有效的话就在B服务器上重建session。这种方法其实很有用，如果网站有很多个子频道，服务器也不在一个机房，session没办法同步又想做统一登录那就太有用了。 当然还有一种方法就是在负载均衡那一层保持会话，把访问者绑定在某个服务器上，他的所有访问都在那个服务器上就不需要session同步了，这些都是运维层面的东西。 就说这么多吧，根据自己的应用来选择使用session，不要因为大家都说session影响系统性能就畏首畏尾，知道问题，解决问题才是关键，惹不起躲得起不适合这里。 另外还有其他两篇不错的文章在 http://blog.eetag.com/?p=284 http://imdonkey.com/blog/archives/255]]></description>
			<content:encoded><![CDATA[<p>虽然很多人已经能熟练使用Session,但不见得所有人对其原理都熟悉，下面推荐一篇不错的文章!</p>
<p>一、PHP SESSION原理</p>
<p>我们知道，session是在服务器端保持用户会话数据的一种方法，对应的cookie是在客户端保持用户数据。HTTP协议是一种无状态协议，服务器响应完之后就失去了与浏览器的联系，最早，Netscape将cookie引入浏览器，使得数据可以客户端跨页面交换，那么服务器是如何记住众多用户的会话数据呢？</p>
<p>首先要将客户端和服务器端建立一一联系，每个客户端都得有一个唯一标识，这样服务器才能识别出来。建议唯一标识的方法有两种：cookie或者通过GET方式指定。默认配置的PHP使用session的时会建立一个名叫”PHPSESSID”的cookie（可以通过php.ini修改session.name值指定），如果客户端禁用cookie,你也可以指定通过GET方式把session id传到服务器（修改php.ini中session.use_trans_sid等参数）。</p>
<p>我们查看服务器端session.save_path目录会发现很多类似sess_vv9lpgf0nmkurgvkba1vbvj915这样的文件，这个其实就是session id “vv9lpgf0nmkurgvkba1vbvj915″对应的数据。</p>
<p>真相就在这里，客户端将session id传递到服务器，服务器根据session id找到对应的文件，读取的时候对文件内容进行反序列化就得到session的值，保存的时候先序列化再写入。</p>
<p>事实就是这样，所以如果服务器不支持session或者你想自定义session，完全可以DIY，通过PHP的uniqid生成永不重复的session id，然后找个地方存储session的内容即可，你也可以学flickr把session存储在MySQL数据库中。</p>
<p><span id="more-253"></span></p>
<p>二、使用session之前为什么必须先执行session_start()？</p>
<p>了解的原理之后，所谓的session其实就是客户端一个session id服务器端一个session file，新建session之前执行session_start()是告诉服务器要种一个cookie以及准备好session文件，要不然你的session内容怎么存；读取session之前执行session_start()是告诉服务器，赶紧根据session id把session文件反序列化。</p>
<p>只有一个session函数可以在session_start()之前执行，session_name()：读取或指定session名称（比如默认的就是”PHPSESSID”），这个当然要在session_start之前执行。</p>
<p>三、session影响系统性能</p>
<p>session在大访问量网站上确实影响系统性能，影响性能的原因之一由文件系统设计造成，在同一个目录下超过10000个文件时，文件的定位将非常耗时，PHP支持session目录hash，我们可以通过修改php.ini中session.save_path = &#8221;2;/path/to/session/dir&#8221;，那么session将存储在两级子目录中，每个目录有16个子目录[0~f]，不过好像PHP session不支持创建目录，你需要事先把那么些目录创建好 。</p>
<p>还有一个问题就是小文件的效率问题，一般我们的session数据都不会太大（1～2K），如果有大量这样1～2K的文件在磁盘上，IO效率肯定会很差，PHP手册上建议使用Reiserfs文件系统，不过Reiserfs的前景堪忧，Reiserfs的作者把媳妇给杀了，SuSE也抛弃了Reiserfs。</p>
<p>其实还有很多中存储session的方式，可以通过php -i|grep “Registered save handlers”查看，比如Registered save handlers =&gt; files user sqlite eaccelerator可以通过文件、用户、sqlite、eaccelerator来存，如果服务器装了memcached，还有会mmcache的选项。当然还有很多，比如MySQL、PostgreSQL等等。都是不错的选择。</p>
<p>四、session的同步</p>
<p>我们前端可能有很多台服务器，用户在A服务器上登录了，种下了session信息，然后访问网站的某些页面没准跳到B服务器上去了，如果这个时候B服务器上没有session信息又没有做特殊处理，可能就会出问题了。</p>
<p>session同步有很多种，如果你是存储在memcached或者MySQL中，那就很容易了，指定到同样的位置即可，如果是文件形式的，你可以用NFS统一存储。</p>
<p>还有一种方式是通过加密的cookie来实现，用户在A服务器上登录成功，在用户的浏览器上种上一个加密的cookie，当用户访问B服务器时，检查有无session，如果有当然没问题，如果没有，就去检验cookie是否有效，cookie有效的话就在B服务器上重建session。这种方法其实很有用，如果网站有很多个子频道，服务器也不在一个机房，session没办法同步又想做统一登录那就太有用了。</p>
<p>当然还有一种方法就是在负载均衡那一层保持会话，把访问者绑定在某个服务器上，他的所有访问都在那个服务器上就不需要session同步了，这些都是运维层面的东西。</p>
<p>就说这么多吧，根据自己的应用来选择使用session，不要因为大家都说session影响系统性能就畏首畏尾，知道问题，解决问题才是关键，惹不起躲得起不适合这里。</p>
<p>另外还有其他两篇不错的文章在</p>
<div id="_mcePaste"><a href="http://blog.eetag.com/?p=284">http://blog.eetag.com/?p=284</a></div>
<div id="_mcePaste"><a href="  http://imdonkey.com/blog/archives/255">http://imdonkey.com/blog/archives/255</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.think168.net/2010/php-session-mechanism-and-application-of-article-collection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS SVN客户端应用</title>
		<link>http://www.think168.net/2010/centos-svn-client-application/</link>
		<comments>http://www.think168.net/2010/centos-svn-client-application/#comments</comments>
		<pubDate>Sat, 08 May 2010 03:37:36 +0000</pubDate>
		<dc:creator>云端听海</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.think168.net/?p=250</guid>
		<description><![CDATA[一、CentOS安装TortoiseSVN yum install -y subversion 二、SVN客户端命令 1、查看帮助 命令：svn help 2、同步(checkout)服务器数据到本地 命令：svn checkout [directory] svn co [directory] 3、提交(commit)本地文档到服务器 命令：svn commit -m &#8220;&#8221; [directory&#124;file] svn ci -m &#8220;&#8221; [directory&#124;file] 4、更新(update)服务器数据到本地 命令：svn update [directory&#124;file] svn up [directory&#124;file] 5、查看日志 命令：svn log [directory&#124;file] 6、增加(add)本地数据到服务器 命令：svn add]]></description>
			<content:encoded><![CDATA[<p>一、CentOS安装TortoiseSVN<br />
yum install -y  subversion</p>
<p>二、SVN客户端命令</p>
<p>1、查看帮助<br />
命令：svn help</p>
<p>2、同步(checkout)服务器数据到本地<br />
命令：svn checkout <url> [directory]<br />
        svn co </url><url> [directory]</p>
<p>3、提交(commit)本地文档到服务器<br />
命令：svn commit -m &#8220;&#8221; [directory|file]<br />
        svn ci -m &#8220;&#8221; [directory|file]<br />
<span id="more-250"></span><br />
4、更新(update)服务器数据到本地<br />
命令：svn update [directory|file]<br />
        svn up [directory|file]</p>
<p>5、查看日志<br />
命令：svn log [directory|file]</p>
<p>6、增加(add)本地数据到服务器<br />
命令：svn add <directory |file></p>
<p></directory></url></p>
]]></content:encoded>
			<wfw:commentRss>http://www.think168.net/2010/centos-svn-client-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql 5.0存储过程学习笔记(1)</title>
		<link>http://www.think168.net/2010/mysql-5-0-notes-stored-procedure/</link>
		<comments>http://www.think168.net/2010/mysql-5-0-notes-stored-procedure/#comments</comments>
		<pubDate>Sat, 08 May 2010 01:58:49 +0000</pubDate>
		<dc:creator>云端听海</dc:creator>
				<category><![CDATA[学习]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[存储过程]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.think168.net/?p=243</guid>
		<description><![CDATA[一、基本语法 1、创建 2、调用 3、删除 4、显示数据库中所有存储的存储过程基本信息，包括所属数据库，存储过程名称，创建时间等 5、显示某一个存储过程的详细信息 4.区块定义 5、条件语句 6、循环语句 while循环 loop循环 repeat until循环 二、运算符 算术运算符 + 加 SET var1=2+2; 4 - 减 SET var2=3-2; 1 * 乘 SET var3=3*2; 6 / 除 SET var4=10/3; 3.3333 DIV 整除 SET var5=10 DIV 3; 3 % 取模 SET var6=10%3 ; 1 比较运算符 > 大于 1>2 False < 小于 [...]]]></description>
			<content:encoded><![CDATA[<p>一、基本语法<br />
1、创建</p>
<pre class="brush: sql; title: ; notranslate">
create procedure sp_name()
begin
………
end
</pre>
<p>2、调用</p>
<pre class="brush: sql; title: ; notranslate">
call sp_name()
</pre>
<p>3、删除</p>
<pre class="brush: sql; title: ; notranslate">
drop procedure sp_name
</pre>
<p><span id="more-243"></span><br />
4、显示数据库中所有存储的存储过程基本信息，包括所属数据库，存储过程名称，创建时间等</p>
<pre class="brush: sql; title: ; notranslate">
show procedure status
</pre>
<p>5、显示某一个存储过程的详细信息</p>
<pre class="brush: sql; title: ; notranslate">
show create procedure sp_name
</pre>
<p>4.区块定义</p>
<pre class="brush: sql; title: ; notranslate">
begin
……
end;
#也可以给区块起别名，如：
lable:begin
………..
end lable;
#可以用leave lable;跳出区块，执行区块以后的代码
</pre>
<p>5、条件语句</p>
<pre class="brush: sql; title: ; notranslate">
if 条件 then
statement
else
statement
end if;
</pre>
<p>6、循环语句<br />
while循环</p>
<pre class="brush: sql; title: ; notranslate">
[label:] WHILE expression DO

statements

END WHILE [label] ;
</pre>
<p>loop循环</p>
<pre class="brush: sql; title: ; notranslate">
[label:] LOOP

statements

END LOOP [label];
</pre>
<p>repeat until循环</p>
<pre class="brush: sql; title: ; notranslate">
[label:] REPEAT

statements

UNTIL expression

END REPEAT [label] ;
</pre>
<p>二、运算符</p>
<p>算术运算符<br />
+     加   SET var1=2+2;       4<br />
-     减   SET var2=3-2;       1<br />
*     乘   SET var3=3*2;       6<br />
/     除   SET var4=10/3;      3.3333<br />
DIV   整除 SET var5=10 DIV 3;  3<br />
%     取模 SET var6=10%3 ;     1</p>
<p>比较运算符<br />
>            大于 1>2 False<br />
< 小于 2&lt;1 False<br />
<=           小于等于 2<=2 True<br />
>=           大于等于 3>=2 True<br />
BETWEEN      在两值之间 5 BETWEEN 1 AND 10 True<br />
NOT BETWEEN  不在两值之间 5 NOT BETWEEN 1 AND 10 False<br />
IN           在集合中 5 IN (1,2,3,4) False<br />
NOT IN       不在集合中 5 NOT IN (1,2,3,4) True<br />
=            等于 2=3 False<br />
<>, !=       不等于 2<>3 False<br />
< =>          严格比较两个NULL值是否相等 NULL< =>NULL True<br />
LIKE         简单模式匹配 &#8220;Guy Harrison&#8221; LIKE &#8220;Guy%&#8221; True<br />
REGEXP       正则式匹配 &#8220;Guy Harrison&#8221; REGEXP &#8220;[Gg]reg&#8221; False<br />
IS NULL      为空 0 IS NULL False<br />
IS NOT NULL  不为空 0 IS NOT NULL True</p>
<p>逻辑运算符<br />
与(AND)<br />
或(OR)<br />
异或(XOR)</p>
<p>位运算符<br />
|   位或<br />
&#038;   位与<br />
< <  左移位<br />
>>  右移位<br />
~   位非(单目运算，按位取反)</p>
<p>三、MYSQL基本函数</p>
<p>1.字符串类 </p>
<pre class="brush: sql; title: ; notranslate">
CHARSET(str) #返回字串字符集
CONCAT (string2  [,... ]) #连接字串
INSTR (string ,substring ) #返回substring首次在string中出现的位置,不存在返回0
LCASE (string2 ) #转换成小写
LEFT (string2 ,length ) #从string2中的左边起取length个字符
LENGTH (string ) #string长度
LOAD_FILE (file_name ) #从文件读取内容
LOCATE (substring , string  [,start_position ] ) 同INSTR,但可指定开始位置
LPAD (string2 ,length ,pad ) #重复用pad加在string开头,直到字串长度为length
LTRIM (string2 ) #去除前端空格
REPEAT (string2 ,count ) #重复count次
REPLACE (str ,search_str ,replace_str ) #在str中用replace_str替换search_str
RPAD (string2 ,length ,pad) #在str后用pad补充,直到长度为length
RTRIM (string2 ) #去除后端空格
STRCMP (string1 ,string2 ) #逐字符比较两字串大小,
SUBSTRING (str , position  [,length ]) #从str的position开始,取length个字符,
注：mysql中处理字符串时，默认第一个字符下标为1，即参数position必须大于等于1
TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) #去除指定位置的指定字符
UCASE (string2 ) #转换成大写
RIGHT(string2,length) #取string2最后length个字符
SPACE(count) #生成count个空格
</pre>
<p>2.数学类</p>
<pre class="brush: sql; title: ; notranslate">
ABS (number2 ) #绝对值
BIN (decimal_number ) #十进制转二进制
CEILING (number2 ) #向上取整
CONV(number2,from_base,to_base) #进制转换
FLOOR (number2 ) #向下取整
FORMAT (number,decimal_places ) #保留小数位数
HEX (DecimalNumber ) #转十六进制
#注：HEX()中可传入字符串，则返回其ASC-11码，如HEX(’DEF’)返回4142143
#也可以传入十进制整数，返回其十六进制编码，如HEX(25)返回19
LEAST (number , number2  [,..]) #求最小值
MOD (numerator ,denominator ) #求余
POWER (number ,power ) #求指数
RAND([seed]) #随机数
ROUND (number  [,decimals ]) #四舍五入,decimals为小数位数]
SIGN (number2 ) #返回符号,正负或0
SQRT(number2) #开平方
</pre>
<p>3.日期时间类</p>
<pre class="brush: sql; title: ; notranslate">
ADDTIME (date2 ,time_interval ) #将time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) #转换时区
CURRENT_DATE (  ) #当前日期
CURRENT_TIME (  ) #当前时间
CURRENT_TIMESTAMP (  ) #当前时间戳
DATE (datetime ) #返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type ) #在date2中加上日期或时间
DATE_FORMAT (datetime ,FormatCodes ) #使用formatcodes格式显示datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) #在date2上减去一个时间
DATEDIFF (date1 ,date2 ) #两个日期差
DAY (date ) #返回日期的天
DAYNAME (date ) #英文星期
DAYOFWEEK (date ) #星期(1-7) ,1为星期天
DAYOFYEAR (date ) #一年中的第几天
EXTRACT (interval_name  FROM date ) #从date中提取日期的指定部分
MAKEDATE (year ,day ) #给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second ) #生成时间串
MONTHNAME (date ) #英文月份名
NOW (  ) #当前时间
SEC_TO_TIME (seconds ) #秒数转成时间
STR_TO_DATE (string ,format ) #字串转成时间,以format格式显示
TIMEDIFF (datetime1 ,datetime2 ) #两个时间差
TIME_TO_SEC (time ) #时间转秒数]
WEEK (date_time [,start_of_week ]) #第几周
YEAR (datetime ) #年份
DAYOFMONTH(datetime) #月的第几天
HOUR(datetime) #小时
LAST_DAY(date) #date的月的最后日期
MICROSECOND(datetime) #微秒
MONTH(datetime) #月
MINUTE(datetime) #分
 </pre>
<p>附:可用在INTERVAL中的类型</p>
<pre class="brush: sql; title: ; notranslate">
DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.think168.net/2010/mysql-5-0-notes-stored-procedure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

