<?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>Setting Sun&#039;s Blog - 残阳</title>
	<atom:link href="http://www.setting.cc/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.setting.cc/blog</link>
	<description>彪悍的人生不需要解释~~</description>
	<lastBuildDate>Sat, 31 Jul 2010 14:46:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>phper10问10答</title>
		<link>http://www.setting.cc/blog/archives/17.html</link>
		<comments>http://www.setting.cc/blog/archives/17.html#comments</comments>
		<pubDate>Sat, 31 Jul 2010 11:26:38 +0000</pubDate>
		<dc:creator>Setting Sun</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[coder]]></category>

		<guid isPermaLink="false">http://www.setting.cc/blog/archives/17.html</guid>
		<description><![CDATA[在PPC看到这样一篇，觉得很有感触，很多东西都有些忘了，有些东西是不能放的，其地址为：http://bbs.phpchina.com/viewthread.php?tid=174331
其内容及答案如下：
1.首先看了PHP的源码API函数，对于许多口水仗的争论一笑而过，只是停留在脚本级别上的什么效率，安全。。。之争完全就是无稽之谈，没有深入理解API，所有的争论都是臆测和不科学的态度。你做了吗？
答：没有
2.不再把PHP看作一门后台语言，而是一门类似JS的脚本，页面表现级的语言，更多的是尝试使用一种软件来做后台，PHP做前台，尝试真正的B/S开发。你的看法呢？
答：我认为PHP会有更好的发展，我始终坚信这一点！
3.知识更新。PHP中的接口你懂了吗？反射你听过吗？JS中的事件冒泡你懂了吗？原型链知道吗？一切函数都是对象，你能理解否？MYSQL里面的视图，存储过程你尝试过么有？
答：已经2年没写过JS了该忘的不该忘的已经全忘了。。。反射在用。JS PASS吧。。不知道。。可以理解。。目前还没用过视图和存储过程，我不推荐用mysql 来做过程
4.扎实的学知识。你是不是离开了JQ框架就连个DOM操作的原生JS都不会写了？你是不是离开了DB类，就连个简单的查询都不会写了？你是不是离开了IDE，连个表格都画不出来？你是不是到现在多表查询，子查询都还不会？你是不是到现在就只知道索引是用来加快查询的？
你是不是到现在连个PHP5的稍微复杂点的OO类都还不会写？你会正则吗？你的E文水平咋样？
答：JS继续PASS吧。。不会DB操作曾经在纸上写到吐我感觉我这辈子都忘不了。。同上写到吐（这算不算基础扎实，自嘲一下）。。继续同上。。目前对于索引我知道的确实不多
5.扎实的算法基础。你知道选择排序，插入排序，冒泡排序，二分排序，希尔排序并且能写出来吗？你知道怎么遍历二叉树吗？知道霍夫曼吗？你知道图吗？你知道龙格-库塔，迭代，插值，雅戈尔，牛顿下山法吗？知道ZIP压缩原理吗？你是不是可爱到以为加减乘除加上循环判断就搞定了算法？你知道概率论，微积分，线性方程组在算法中是非常非常基础的吗？
答：在做游戏中学到了比较多的算法，但是对于题目上的好像80%没用过，也没有了解过
6.学习的主动性。你是不是自己的网站连个拿的出手的JS都没有写过？你网站的效果是不是都是你下载的JQ插件弄出来的？到现在都还没有看过JQ的代码？你现在的模板引擎是谁的？DB类是谁的？框架是谁的？你是不是一直都很鄙视重复造轮子的事情，就像中国现在，“拿来主义”，永远是MADE IN CHINA,而不是Created in China？
答：JS继续PASS吧。。PASS。。模板引擎是smarty。。。DB类是主程写的(写的真的很风骚)。。主程。。。我很鄙视重复造轮子，我是拿来主义者，其实写框架在中国已经变味了我感觉，拼的无非就是utils\helper
7.广泛的基础。你会汇编吗？那C总该会点吧。。那C++呢，那简单的JAVA总该会吧。。。那。。那傻瓜化的VB,NET,PY。。。？什么，你只会PHP？其他啥都不会？JS总该会吧？啊，不会，只会用网上下来的JQ？你除了PHP还会点啥？那假如PHP垮台了或者你所在的公司不用PHP了你吃什么？如果老板让你学J2SE你怕不怕？
答：不会。。不会。。想往游戏圈深入发展，所以目前在学习C++中。。python会一点。。。好吧JS继续pass吧
8.你是不是就准备一辈子做个coder?你的知识如果让你传授给别人的话，能支撑三个月吗？三个月后你还能讲得出点其他的东西吗？
答：争取做到每天学习，摄取新知识。。后面这个我无法估计
9.你现在的水平和你刚开始学的时候进步了多少？你有过自己的作品吗？有多少代码是你自己写的？你认为是不是只要会写PHP代码就够了？这样的话一个初中生三个月后也就能达到你的水平了，你认为呢？你准备一直停留在这个水平吗？
答：准确的说我曾经有过1年时间丝毫没有一点进步，来京之后进入了一家游戏公司技术得到飞速的提升，但是那一年让我的基本功做的非常扎实！其实我更加想做一个管理者！我不知道我的IT激情还能燃烧多久，如果没有了燃料我可能会转型到其他行业吧！
10.最后一问，你除了会写仅会的PHP代码，还会点其他的吗？你有把握做其他工作吗？你能养活自己老婆孩子吗？能给他们幸福吗？
答：我在努力，我觉得只有在逆境中才会有进步！老天赐给我一个妞吧！！！
建议其它的phper也可以问下自己

	标签：coder, php
]]></description>
			<content:encoded><![CDATA[<p>在PPC看到这样一篇，觉得很有感触，很多东西都有些忘了，有些东西是不能放的，其地址为：http://bbs.phpchina.com/viewthread.php?tid=174331<br />
其内容及答案如下：<br />
1.首先看了PHP的源码API函数，对于许多口水仗的争论一笑而过，只是停留在脚本级别上的什么效率，安全。。。之争完全就是无稽之谈，没有深入理解API，所有的争论都是臆测和不科学的态度。你做了吗？<br />
答：没有</p>
<p>2.不再把PHP看作一门后台语言，而是一门类似JS的脚本，页面表现级的语言，更多的是尝试使用一种软件来做后台，PHP做前台，尝试真正的B/S开发。你的看法呢？<br />
答：我认为PHP会有更好的发展，我始终坚信这一点！</p>
<p>3.知识更新。PHP中的接口你懂了吗？反射你听过吗？JS中的事件冒泡你懂了吗？原型链知道吗？一切函数都是对象，你能理解否？MYSQL里面的视图，存储过程你尝试过么有？<br />
答：已经2年没写过JS了该忘的不该忘的已经全忘了。。。反射在用。JS PASS吧。。不知道。。可以理解。。目前还没用过视图和存储过程，我不推荐用mysql 来做过程</p>
<p>4.扎实的学知识。你是不是离开了JQ框架就连个DOM操作的原生JS都不会写了？你是不是离开了DB类，就连个简单的查询都不会写了？你是不是离开了IDE，连个表格都画不出来？你是不是到现在多表查询，子查询都还不会？你是不是到现在就只知道索引是用来加快查询的？<br />
你是不是到现在连个PHP5的稍微复杂点的OO类都还不会写？你会正则吗？你的E文水平咋样？<br />
答：JS继续PASS吧。。不会DB操作曾经在纸上写到吐我感觉我这辈子都忘不了。。同上写到吐（这算不算基础扎实，自嘲一下）。。继续同上。。目前对于索引我知道的确实不多</p>
<p>5.扎实的算法基础。你知道选择排序，插入排序，冒泡排序，二分排序，希尔排序并且能写出来吗？你知道怎么遍历二叉树吗？知道霍夫曼吗？你知道图吗？你知道龙格-库塔，迭代，插值，雅戈尔，牛顿下山法吗？知道ZIP压缩原理吗？你是不是可爱到以为加减乘除加上循环判断就搞定了算法？你知道概率论，微积分，线性方程组在算法中是非常非常基础的吗？<br />
答：在做游戏中学到了比较多的算法，但是对于题目上的好像80%没用过，也没有了解过</p>
<p>6.学习的主动性。你是不是自己的网站连个拿的出手的JS都没有写过？你网站的效果是不是都是你下载的JQ插件弄出来的？到现在都还没有看过JQ的代码？你现在的模板引擎是谁的？DB类是谁的？框架是谁的？你是不是一直都很鄙视重复造轮子的事情，就像中国现在，“拿来主义”，永远是MADE IN CHINA,而不是Created in China？<br />
答：JS继续PASS吧。。PASS。。模板引擎是smarty。。。DB类是主程写的(写的真的很风骚)。。主程。。。我很鄙视重复造轮子，我是拿来主义者，其实写框架在中国已经变味了我感觉，拼的无非就是utils\helper</p>
<p>7.广泛的基础。你会汇编吗？那C总该会点吧。。那C++呢，那简单的JAVA总该会吧。。。那。。那傻瓜化的VB,NET,PY。。。？什么，你只会PHP？其他啥都不会？JS总该会吧？啊，不会，只会用网上下来的JQ？你除了PHP还会点啥？那假如PHP垮台了或者你所在的公司不用PHP了你吃什么？如果老板让你学J2SE你怕不怕？<br />
答：不会。。不会。。想往游戏圈深入发展，所以目前在学习C++中。。python会一点。。。好吧JS继续pass吧</p>
<p>8.你是不是就准备一辈子做个coder?你的知识如果让你传授给别人的话，能支撑三个月吗？三个月后你还能讲得出点其他的东西吗？<br />
答：争取做到每天学习，摄取新知识。。后面这个我无法估计</p>
<p>9.你现在的水平和你刚开始学的时候进步了多少？你有过自己的作品吗？有多少代码是你自己写的？你认为是不是只要会写PHP代码就够了？这样的话一个初中生三个月后也就能达到你的水平了，你认为呢？你准备一直停留在这个水平吗？<br />
答：准确的说我曾经有过1年时间丝毫没有一点进步，来京之后进入了一家游戏公司技术得到飞速的提升，但是那一年让我的基本功做的非常扎实！其实我更加想做一个管理者！我不知道我的IT激情还能燃烧多久，如果没有了燃料我可能会转型到其他行业吧！</p>
<p>10.最后一问，你除了会写仅会的PHP代码，还会点其他的吗？你有把握做其他工作吗？你能养活自己老婆孩子吗？能给他们幸福吗？<br />
答：我在努力，我觉得只有在逆境中才会有进步！老天赐给我一个妞吧！！！</p>
<p>建议其它的phper也可以问下自己</p>

	标签：<a href="http://www.setting.cc/blog/tag/coder" title="coder" rel="tag nofollow">coder</a>, <a href="http://www.setting.cc/blog/tag/php" title="php" rel="tag nofollow">php</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.setting.cc/blog/archives/17.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>针对浏览器vim插件的研究</title>
		<link>http://www.setting.cc/blog/archives/16.html</link>
		<comments>http://www.setting.cc/blog/archives/16.html#comments</comments>
		<pubDate>Tue, 29 Jun 2010 03:30:44 +0000</pubDate>
		<dc:creator>Setting Sun</dc:creator>
				<category><![CDATA[研发]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[shortcut]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vimlike]]></category>
		<category><![CDATA[Vimperator]]></category>
		<category><![CDATA[vrome]]></category>

		<guid isPermaLink="false">http://www.setting.cc/blog/archives/16.html</guid>
		<description><![CDATA[firefox就不说了Vimperator，哥一直在用，谁用谁知道  最近使用了一个chrome我被他的运行速度震精了，当时我就湿了 于是很自然的想到有没有vim插件  我找到了三个来代替 Shortcut Manager、Vimlike Smooziee、Vrome（前者的升级）  我先说一下Shortcut Manager 他的优点是可以自定义各种快捷键 缺点是内置系统功能偏少，不得不用javascript去自己实现 如果你设置的快捷键和系统冲突了，他会优先系统(orz，用户至上啊，大老)  但是基本的h、j、k、l、d、o、t用他来实现还是不错的 我已经写了一些快捷键的设置如下

// ==UserScript==
// @ShortcutManager
// @name Scroll down by 200 pixels
// @namespace COXhleP4izwk
// @key j
// @include *
// @execute ScrollDown(["200"])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Scroll left by 150 pixels
// @namespace COXhleP4izwk
// @key h
// @include *
// @execute ScrollLeft(["150"])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name [...]]]></description>
			<content:encoded><![CDATA[<p>firefox就不说了Vimperator，哥一直在用，谁用谁知道  最近使用了一个chrome我被他的运行速度震精了，当时我就湿了 于是很自然的想到有没有vim插件  我找到了三个来代替 Shortcut Manager、Vimlike Smooziee、Vrome（前者的升级）  我先说一下Shortcut Manager 他的优点是可以自定义各种快捷键 缺点是内置系统功能偏少，不得不用javascript去自己实现 如果你设置的快捷键和系统冲突了，他会优先系统(orz，用户至上啊，大老)  但是基本的h、j、k、l、d、o、t用他来实现还是不错的 我已经写了一些快捷键的设置如下
<pre code="">
// ==UserScript==
// @ShortcutManager
// @name Scroll down by 200 pixels
// @namespace COXhleP4izwk
// @key j
// @include *
// @execute ScrollDown(["200"])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Scroll left by 150 pixels
// @namespace COXhleP4izwk
// @key h
// @include *
// @execute ScrollLeft(["150"])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Scroll up by 200 pixels
// @namespace COXhleP4izwk
// @key k
// @include *
// @execute ScrollUp(["200"])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Open a new tab last
// @namespace COXhleP4izwk
// @key t
// @include *
// @execute OpenTabLast([])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Scroll left by 150 pixel
// @namespace COXhleP4izwk
// @key l
// @include *
// @execute ScrollRight(["150"])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Select the left tab
// @namespace COXhleP4izwk
// @key Alt+h
// @include *
// @execute SelectLeftTab([])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Select the right tab
// @namespace COXhleP4izwk
// @key Alt+l
// @include *
// @execute SelectRightTab([])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Close the current tab
// @namespace COXhleP4izwk
// @key d
// @include *
// @execute CloseTab([])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Go to head of a line
// @namespace COXhleP4izwk
// @key g g
// @include *
// @execute GoToLineHead([])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Go to end of a line
// @namespace COXhleP4izwk
// @key Shift+g
// @include *
// @execute GoToLineEnd([])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Reload
// @namespace COXhleP4izwk
// @key r
// @include *
// @execute Reload([])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Duplicate the current tab
// @namespace COXhleP4izwk
// @key p
// @include *
// @execute DuplicateTab([])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Upper directory
// @namespace COXhleP4izwk
// @key u
// @include *
// @execute UpperDirectory([])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Focus on the next input element
// @namespace COXhleP4izwk
// @key a
// @include *
// @execute FocusNextElement([])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name Focus on the previous input element
// @namespace COXhleP4izwk
// @key s
// @include *
// @execute FocusPrevElement([])
// ==/UserScript==

// ==UserScript==
// @ShortcutManager
// @name View source
// @namespace COXhleP4izwk
// @key f g
// @include *
// @execute ViewSource([])
// ==/UserScript==
</pre>
<p>因为Vimlike Smooziee、Vrome是升级关系我就挑后面的说了</p>
<p>他基本上已经实现了两种模式的快捷键及insert模式、normal模式<br />
我用的一下除了buffer不用能、QuickHint和Search 比较卡之外，其他目前我还没遇到什么问题</p>
<p>初始化的设置j、k的值太小为15（我了个擦，你想累死人啊）<br />
修改方法为C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Extensions\godjoomfiimiddapohpmfklhgmbfffjj\0.5.7\frontend\modules\scroll.js<br />
把15改为500<br />
var vertical_moment   = 500;<br />
var horizontal_moment = 500;</p>
<p>等待他的更新（不给力啊老湿）</p>
<p>如有新的内容我补上</p>

	标签：<a href="http://www.setting.cc/blog/tag/chrome" title="chrome" rel="tag nofollow">chrome</a>, <a href="http://www.setting.cc/blog/tag/shortcut" title="shortcut" rel="tag nofollow">shortcut</a>, <a href="http://www.setting.cc/blog/tag/vim" title="vim" rel="tag nofollow">vim</a>, <a href="http://www.setting.cc/blog/tag/vimlike" title="vimlike" rel="tag nofollow">vimlike</a>, <a href="http://www.setting.cc/blog/tag/vimperator" title="Vimperator" rel="tag nofollow">Vimperator</a>, <a href="http://www.setting.cc/blog/tag/vrome" title="vrome" rel="tag nofollow">vrome</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.setting.cc/blog/archives/16.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>windows下的nginx+php5.3+php-cgi+mysql</title>
		<link>http://www.setting.cc/blog/archives/10.html</link>
		<comments>http://www.setting.cc/blog/archives/10.html#comments</comments>
		<pubDate>Fri, 05 Mar 2010 04:06:37 +0000</pubDate>
		<dc:creator>Setting Sun</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php-cgi]]></category>

		<guid isPermaLink="false">http://www.setting.cc/blog/archives/10.html</guid>
		<description><![CDATA[引子： 
由于工作需要 
准备工作：
1、首先下载最新的nginx http://nginx.org/download/nginx-0.8.34.zip
2、下载PHP5.3 http://windows.php.net/downloads/releases/php-5.3.2-Win32-VC9-x86.zip
3、下载MYSQL http://download.mysql.cn/download_file/zip/5.0/mysql-5.0.22-win32.zip 

  配置PHP: 

把下载完的php解压到：D:\php 。备份php.ini-development，并将其重命名为php.ini。然后编辑php.ini。

	documentroot.doc_root = &#34;&#34;
	本来我写的是我的项目根目录的，本来发现是错误的，这个稍后在说
	扩展存放目录 extension_dir——更改为真实的扩展存放地址。extension_dir = “ext”
	默认时区更改——在[Date]里面增加：date.timezone = PRC 

因为nginx需要的是cgi方式的php，所以如下几个地方是重点，否则nginx无法打开php文件：

	这里我是copy的别人的，反正我自己使用正常
	enable_dl = On
	cgi.force_redirect = 0
	cgi.fix_pathinfo=1
	fastcgi.impersonate = 1
	cgi.rfc2616_headers = 1 

5.3版本我没有发现php5ts.dll和libmysql.dll两个文件，就不管他了
配置nginx:
  将下载下来的nginx解压到D:\nginx目录中，我给conf目录做了些工作，一会直接上配置文件。
nginx.conf 内容详情
	#user  nobody;
	#启动进程
	worker_processes  1; 

	#错误日志及PID文档
	error_log  logs/error.log crit;
	pid        logs/nginx.pid;

	#工作模式及连接数上限
	events {
	    #use epoll;  #windows下好像会出错
	 [...]]]></description>
			<content:encoded><![CDATA[<p>引子： </p>
<pre>由于工作需要 </pre>
<p>准备工作：</p>
<pre>1、首先下载最新的nginx <a href="http://nginx.org/download/nginx-0.8.34.zip" target="_blank">http://nginx.org/download/nginx-0.8.34.zip</a>
2、下载PHP5.3 <a href="http://windows.php.net/downloads/releases/php-5.3.2-Win32-VC9-x86.zip" target="_blank">http://windows.php.net/downloads/releases/php-5.3.2-Win32-VC9-x86.zip</a>
3、下载MYSQL <a href="http://download.mysql.cn/download_file/zip/5.0/mysql-5.0.22-win32.zip" target="_blank">http://download.mysql.cn/download_file/zip/5.0/mysql-5.0.22-win32.zip</a> </pre>
<p>
  <br />配置PHP: </p>
<p></p>
<pre>把下载完的php解压到：D:\php 。备份php.ini-development，并将其重命名为php.ini。然后编辑php.ini。

	documentroot.doc_root = &quot;&quot;
	本来我写的是我的项目根目录的，本来发现是错误的，这个稍后在说
	扩展存放目录 extension_dir——更改为真实的扩展存放地址。extension_dir = “ext”
	默认时区更改——在[Date]里面增加：date.timezone = PRC 

因为nginx需要的是cgi方式的php，所以如下几个地方是重点，否则nginx无法打开php文件：

	这里我是copy的别人的，反正我自己使用正常
	enable_dl = On
	cgi.force_redirect = 0
	cgi.fix_pathinfo=1
	fastcgi.impersonate = 1
	cgi.rfc2616_headers = 1 

5.3版本我没有发现php5ts.dll和libmysql.dll两个文件，就不管他了</pre>
<p>配置nginx:<br />
  <br />将下载下来的nginx解压到D:\nginx目录中，我给conf目录做了些工作，一会直接上配置文件。</p>
<p>nginx.conf 内容详情</p>
<pre>	#user  nobody;
	#启动进程
	worker_processes  1; 

	#错误日志及PID文档
	error_log  logs/error.log crit;
	pid        logs/nginx.pid;

	#工作模式及连接数上限
	events {
	    #use epoll;  #windows下好像会出错
	    worker_connections  1024;
	}

	#设定http服务器
	http {
	    #设定负载均衡的服务器列表&gt;#设定负载均衡的服务器列表
	    upstream phpfastcgi {
		server 127.0.0.1:9000 weight=1;
		#server 127.0.0.1:9001 weight=1;
	    }

	    #设定mime类型
	    include       mime.types;
	    default_type  application/octet-stream;
	    charset utf-8;

	    server_names_hash_bucket_size 128;
	    client_header_buffer_size 32k;
	    large_client_header_buffers 4 32k;
	    client_max_body_size 8m;

	    sendfile on;
	    tcp_nopush     on;
	    keepalive_timeout 60;
	    tcp_nodelay on;

	    fastcgi_connect_timeout 300;
	    fastcgi_send_timeout 300;
	    fastcgi_read_timeout 300;
	    fastcgi_buffer_size 64k;
	    fastcgi_buffers 4 64k;
	    fastcgi_busy_buffers_size 128k;
	    fastcgi_temp_file_write_size 128k;

	    #开启gzip模块
	    gzip on;
	    gzip_min_length 1k;
	    gzip_buffers     4 16k;
	    gzip_http_version 1.0;
	    gzip_comp_level 2;
	    gzip_types       text/plain application/x-javascript text/css application/xml;
	    gzip_vary on;

	    #设定日志格式
	    log_format access '$remote_addr - $remote_user [$time_local] &quot;$request&quot; '
	                        '$status $body_bytes_sent &quot;$http_referer&quot; '
	                        '&quot;$http_user_agent&quot; $http_x_forwarded_for';

	    #加载虚拟主机
	    include nginx.servers.conf;
	}</pre>
<p>nginx.servers.conf 内容详情</p>
<pre>
	server
	{
	    listen 80;
	    server_name test.cc;
	    root D:/www/test/webroot;
	    include nginx.location.conf;
	}
</pre>
<p>nginx.location.conf 内容详情</p>
<pre>
	index index.html index.htm index.php;
	location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
	    expires 30d;
	}

	location ~ .*\.(js|css)$ {
	    expires 1h;
	}

	location ~ \.php$ {
	    fastcgi_pass phpfastcgi;
	    fastcgi_index index.php;
	    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
	    include fastcgi_params;
	}
</pre>
<p>附送两个.bat</p>
<p>start_php.bat 内容详情</p>
<pre>	@ECHO OFF
	ECHO Starting PHP FastCGI
	RunHiddenConsole.exe D:\php\php-cgi.exe -b 127.0.0.1:9000 -c d:\php\php.ini</pre>
<p>stop_php.bat 内容详情</p>
<pre>	@ECHO OFF
	ECHO Stopping nginx...
	taskkill /F /IM nginx.exe &gt; nul
	echo Stopping PHP FastCGI...
	taskkill /F /IM php-cgi.exe &gt; nul
	exit</pre>
<p>一个小工具<br />
  <br /><a href="http://redmine.lighttpd.net/attachments/660/RunHiddenConsole.zip" target="_blank">http://redmine.lighttpd.net/attachments/660/RunHiddenConsole.zip</a></p>
<p>还记得我在php.ini说在doc_root写入项目目录地址会问题么，我的问题就是<br />
  <br />出现No input file specified.</p>
<p>写空反而没事了</p>
<p>好了就写到这了。</p>
<p>参考文章：<br />
  <br /><a href="http://www.xiaoxiaozi.com/2009/09/23/1485/" target="_blank">http://www.xiaoxiaozi.com/2009/09/23/1485/</a></p>

	标签：<a href="http://www.setting.cc/blog/tag/mysql" title="mysql" rel="tag nofollow">mysql</a>, <a href="http://www.setting.cc/blog/tag/nginx" title="nginx" rel="tag nofollow">nginx</a>, <a href="http://www.setting.cc/blog/tag/php" title="php" rel="tag nofollow">php</a>, <a href="http://www.setting.cc/blog/tag/php-cgi" title="php-cgi" rel="tag nofollow">php-cgi</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.setting.cc/blog/archives/10.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>使用Locator获取对象实例</title>
		<link>http://www.setting.cc/blog/archives/7.html</link>
		<comments>http://www.setting.cc/blog/archives/7.html#comments</comments>
		<pubDate>Sun, 21 Feb 2010 08:36:45 +0000</pubDate>
		<dc:creator>Setting Sun</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[instance]]></category>
		<category><![CDATA[locator]]></category>

		<guid isPermaLink="false">http://www.setting.cc/blog/archives/7.html</guid>
		<description><![CDATA[一个高效、易懂、便于管理的加载方法，在开发过程中会方便不少。 下面我来说一个比较简单的方法。  首先我们创建一个抽象类LocatorAbs.php

abstract class LocatorAbs
{
	/**
	 * 初始化的对象
	 *
	 * @var array
	 */
	private $_objects = array();

	/**
	 * 魔术方法实现getXXX得到对象
	 *
	 * @param string $name
	 * @param array $arguments
	 * @return object
	 */
	public function __call($name, $arguments)
	{
		$pos = strpos($name, 'get');

		if($pos === false)
		{
			throw new Exception('invalid class name of ' . $name);
		}

		$className = substr($name, 3);
		return $this->get($className);
	}

	/**
	 * 根据一个传入的类名取得实例
	 *
	 * [...]]]></description>
			<content:encoded><![CDATA[<p>一个高效、易懂、便于管理的加载方法，在开发过程中会方便不少。 下面我来说一个比较简单的方法。  首先我们创建一个抽象类LocatorAbs.php
<pre name="code" class="php">
abstract class LocatorAbs
{
	/**
	 * 初始化的对象
	 *
	 * @var array
	 */
	private $_objects = array();

	/**
	 * 魔术方法实现getXXX得到对象
	 *
	 * @param string $name
	 * @param array $arguments
	 * @return object
	 */
	public function __call($name, $arguments)
	{
		$pos = strpos($name, 'get');

		if($pos === false)
		{
			throw new Exception('invalid class name of ' . $name);
		}

		$className = substr($name, 3);
		return $this->get($className);
	}

	/**
	 * 根据一个传入的类名取得实例
	 *
	 * @param string $className
	 * @return object
	 */
	protected function get($className)
	{
		if(array_key_exists($className, $this->_objects))
		{
			return $this->_objects[$className];
		}

		$object = new $className();
		$this->_objects[$className] = $object;

		return $object;
	}
}
</pre>
<p>这是我们写了一个魔术方法和一个get方法<br />
get方法是用来得到实例对象的，均采用单例模式来实例<br />
魔术方法我们一会才会用到，先不说了。</p>
<p>随后我们创建一个ServiceLocator用来管理我们的业务实例</p>
<pre name="code" class="php">
require_once ROOT_PATH . DIRECTORY_SEPARATOR . 'LocatorAbs.php';
class ServiceLocator extends LocatorAbs
{
	private static $instance;
	private function __construct()
	{}

	/**
	 * 得到ServiceLocator对象实例
	 *
	 * @return ServiceLocator
	 */
	public static function getInstance()
	{
		if(!self::$instance)
		{
			self::$instance = new ServiceLocator();
		}

		return self::$instance;
	}

	/**
	 * 根据一个类名取得一个实例对象
	 *
	 * @param string $className
	 * @return object
	 */
	protected function get($className)
	{
		require_once SERVICE_PATH . DIRECTORY_SEPARATOR . $className . '.php';
		return parent::get($className);
	}

	/**
	 * 取得NiubilityService对象实例
	 *
	 * @return NiubilityService
	 */
	public function getNiubilityService()
	{
		return $this->get('NiubilityService');
	}
}
</pre>
<p>我们把构造方法私有化，使之不能实例，采用单例模式来实例，是为了确保LocatorAbs中的objects不会丢失<br />
在ServiceLocator中我们有一个方法getNiubilityService，其实可以不用写（因为在LocatorAbs中有个魔术方法可以自动帮助我们做这些事情），但是为了IDE联想忍了。</p>
<p>下面我们来创建两个业务文件<br />
NiubilityService.php</p>
<pre name="code" class="php">
class NiubilityService
{
	public function __construct()
	{}

	public function aa()
	{
		echo "哥的博客 http://www.setting.cc/blog\n";
	}
}
</pre>
<p>TestService.php</p>
<pre name="code" class="php">
class TestService
{
	/**
	 * ServiceLocator对象实例
	 *
	 * @var ServiceLocator
	 */
	private $serviceLocator;

	public function __construct()
	{
		$this->serviceLocator = ServiceLocator::getInstance();
	}

	public function test()
	{
		echo '感受哥体内的和谐之力吧，P民的世界与哥何干~';
		echo "\n------------华丽的分割线------------\n";

		$niubilityService = $this->serviceLocator->getNiubilityService();
		$niubilityService->aa();
	}
}
</pre>
<p>现在准备工作已经完成，让我们来看看他是怎么工作的吧！！！</p>
<p>test.php</p>
<pre name="code" class="php">
define(ROOT_PATH, realpath('.'));
define(SERVICE_PATH, realpath('.'));

require_once ROOT_PATH . DIRECTORY_SEPARATOR . 'ServiceLocator.php';

$serviceLocator = ServiceLocator::getInstance();

$niubilityService = $serviceLocator->getNiubilityService();
$niubilityService->aa();

$testService = $serviceLocator->getTestService();
$testService->test();
</pre>
<p>打印结果如下：</p>
<p>哥的博客 http://www.setting.cc/blog<br />
感受哥体内的和谐之力吧，P民的世界与哥何干~<br />
------------华丽的分割线------------<br />
哥的博客 http://www.setting.cc/blog</p>
<p>我们可以看到，他轻松的完成了各各业务之间的那啥。</p>
<p>$testService由于没有在ServiceLocator中写getTestService方法，所以IDE没有相关的联想</p>
<p>哥刚看完 《看你妹之XXXX》感触颇深，怕被和谐，全名我就不写了。哦一西吧！！！！！</p>

	标签：<a href="http://www.setting.cc/blog/tag/instance" title="instance" rel="tag nofollow">instance</a>, <a href="http://www.setting.cc/blog/tag/locator" title="locator" rel="tag nofollow">locator</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.setting.cc/blog/archives/7.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>便捷的IP数据存储和查询</title>
		<link>http://www.setting.cc/blog/archives/6.html</link>
		<comments>http://www.setting.cc/blog/archives/6.html#comments</comments>
		<pubDate>Wed, 13 Jan 2010 09:48:48 +0000</pubDate>
		<dc:creator>Setting Sun</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[ip2long]]></category>
		<category><![CDATA[long2ip]]></category>

		<guid isPermaLink="false">http://www.setting.cc/blog/archives/6.html</guid>
		<description><![CDATA[首先我们需要一个功能健全、容错率高的得到IP方法

    /**
     * 获取客户端IP
     *
     * @return string
     */
    function getClientIP()
    {
        if (isset($_SERVER))
        {
  [...]]]></description>
			<content:encoded><![CDATA[<p>首先我们需要一个功能健全、容错率高的得到IP方法
<pre name="code" class="php">
    /**
     * 获取客户端IP
     *
     * @return string
     */
    function getClientIP()
    {
        if (isset($_SERVER))
        {
            if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
            {
                $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
            }
            else if (isset($_SERVER["HTTP_CLIENT_IP"]))
            {
                $realip = $_SERVER["HTTP_CLIENT_IP"];
            }
            else
            {
                $realip = $_SERVER["REMOTE_ADDR"];
            }
        }
        else
        {
            if (getenv("HTTP_X_FORWARDED_FOR"))
            {
                $realip = getenv("HTTP_X_FORWARDED_FOR");
            }
            else if (getenv("HTTP_CLIENT_IP"))
            {
                $realip = getenv("HTTP_CLIENT_IP");
            }
            else
            {
                $realip = getenv("REMOTE_ADDR");
            }
        }

        return addslashes($realip);
    }
</pre>
<p>如果你只要知道IP地址那么以上代码就可以完成。存储即可。</p>
<p>如果你的需求想要知道这个IP的IP段列表或区域列表，那么恭喜你你杯具了。所以好的数据库设计还是必要的。</p>
<p>PHP自带的函数非常好用，ip2long,long2ip 可以自己去查下手册，保存成int整形入库。</p>
<pre name="code" class="php">
//IP段
$sql = 'select * from `table` where `ip` >= ' . ip2long('10.4.0') . ' AND `ip` <= ' . ip2long('10.4.20.200');
</pre>
<p>对于没有函数支持的可以用下面方法实现。</p>
<pre name="code" class="php">

function getIp2Long($ip)
{
        $ipList = explode('.', $ip);

        return 16777216 * intval($ipList[0]) + 65536 * intval($ipList[1]) + 256 * intval($ipList[2]) + intval($ipList[3]);
}

function getLong2Ip($ipLong)
{
        $ipList = array();

        for($i = 3 ; $i >= 0 ; $i--)
        {
                $ip = intval($ipLong / pow(256, $i));
                $ipList[] = $ip;
                $ipLong -= pow(256, $i) * $ip;
        }

        return implode('.', $ipList);
}
</pre>
<p>就先写到这里吧，纯真数据就是这个规则。</p>

	标签：<a href="http://www.setting.cc/blog/tag/ip" title="ip" rel="tag nofollow">ip</a>, <a href="http://www.setting.cc/blog/tag/ip2long" title="ip2long" rel="tag nofollow">ip2long</a>, <a href="http://www.setting.cc/blog/tag/long2ip" title="long2ip" rel="tag nofollow">long2ip</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.setting.cc/blog/archives/6.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>使用 PHP 解决机率和权重问题</title>
		<link>http://www.setting.cc/blog/archives/4.html</link>
		<comments>http://www.setting.cc/blog/archives/4.html#comments</comments>
		<pubDate>Thu, 17 Dec 2009 11:29:58 +0000</pubDate>
		<dc:creator>Setting Sun</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[weight]]></category>
		<category><![CDATA[几率]]></category>
		<category><![CDATA[权重]]></category>

		<guid isPermaLink="false">http://www.setting.cc/blog/archives/4.html</guid>
		<description><![CDATA[在程序设计中我们经常会碰到要解决机率或权重相关的问题，例如经常碰到的中奖问题。 有一个百货公司办了一个抽奖活动，一等奖的中奖率是3%，二等奖是5%，三等奖是10%，纪念奖是20%。 处理这个需求，一般的程序员会采用如下的逻辑：

$randKey = mt_rand(1, 100);
$prizeLevel = 0;

if ($randKey  10,
	4 => 20
);

$randKey = mt_rand(1, 100);
$radix = 0;

foreach ($prizeInfo as $prizeLevel => $prizeOdds)
{
	$radix += $prizeOdds;

	if ($randKey  100,
	1 => 5,
	2 => 10,
	3 => 20,
	4 => 50
);

$randKey = mt_rand(1, array_sum($prizeInfo));
$radix = 0;

foreach ($prizeInfo as $prizeLevel => $prizeOdds)
{
	$radix += $prizeOdds;

	if ($randKey  100,
	1 => 5,
	2 => 10,
	3 [...]]]></description>
			<content:encoded><![CDATA[<p>在程序设计中我们经常会碰到要解决机率或权重相关的问题，例如经常碰到的中奖问题。 有一个百货公司办了一个抽奖活动，一等奖的中奖率是3%，二等奖是5%，三等奖是10%，纪念奖是20%。 处理这个需求，一般的程序员会采用如下的逻辑：
<pre class="php" name="code">
$randKey = mt_rand(1, 100);
$prizeLevel = 0;

if ($randKey <= 3)
{
	$prizeLevel = 1;
}
elseif ($randKey <= 3 + 5)
{
	$prizeLevel = 2;
}
elseif ($randKey <= 3 + 5 + 10)
{
	$prizeLevel = 3;
}
elseif ($randKey <= 3 + 5 + 10 + 20)
{
	$prizeLevel = 4;
}
</pre>
<p>这段程序似乎有些复杂，我们可以简化一下它： </p>
<pre class="php" name="code">$prizeInfo = array(
	0 => 62,
	1 => 3,
	2 => 5,
	3 => 10,
	4 => 20
);

$randKey = mt_rand(1, 100);
$radix = 0;

foreach ($prizeInfo as $prizeLevel => $prizeOdds)
{
	$radix += $prizeOdds;

	if ($randKey <= $radix)
	{
		break;
	}
}</pre>
<p>权重和机率类似，只是概率总值不固定，我们只想直观的用一个数字的大小来表示想给它多大的机会。 我们修改一下需求，一等奖的权重是5，二等奖是10，三等奖是20，纪念奖是50，没有奖励是100。 实际上，稍微修改一下逻辑，我们就可以处理这个问题了： </p>
<pre class="php" name="code">$prizeInfo = array(
	0 => 100,
	1 => 5,
	2 => 10,
	3 => 20,
	4 => 50
);

$randKey = mt_rand(1, array_sum($prizeInfo));
$radix = 0;

foreach ($prizeInfo as $prizeLevel => $prizeOdds)
{
	$radix += $prizeOdds;

	if ($randKey <= $radix)
	{
		break;
	}
}</pre>
<p>但是实际上，我们在处理更复杂的需求时会发现，即使我们使用了 PHP 中号称更好用线性分布更平均的 mt_rand，统计结果看起来，也不是那么随机，或许这是源于 PHP 本身的问题。 我在设计杀死怪物时按照权重掉落物品的逻辑时，就遇到了这样的问题。 稍作处理后，结果稍微满意了些，基本上，我只是扩大了随机范围，扰乱了权重的顺序。 </p>
<pre class="php" name="code">$prizeInfo = array(
	0 => 100,
	1 => 5,
	2 => 10,
	3 => 20,
	4 => 50
);

$prizeLevels = array_keys($prizeInfo);
shuffle($prizeLevels);

$randKey = rand(1, array_sum($prizeInfo));
$radix = 0;

foreach ($prizeLevels as $prizeLevel)
{
	$radix += $prizeInfo[$prizeLevel];

	if ($randKey <= $radix)
	{
		break;
	}
}</pre>
<p>这段逻辑基本上可以应付大多数的权重和机率问题！ 当然，如果你有更复杂更精确的需求，你可能需要自己设计一个特别的算法。</p>
<p>转自：<a href="http://zivn.me/archives/58" target="_blank">http://zivn.me/archives/58</a></p>

	标签：<a href="http://www.setting.cc/blog/tag/php" title="php" rel="tag nofollow">php</a>, <a href="http://www.setting.cc/blog/tag/weight" title="weight" rel="tag nofollow">weight</a>, <a href="http://www.setting.cc/blog/tag/%e5%87%a0%e7%8e%87" title="几率" rel="tag nofollow">几率</a>, <a href="http://www.setting.cc/blog/tag/%e6%9d%83%e9%87%8d" title="权重" rel="tag nofollow">权重</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.setting.cc/blog/archives/4.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用 GetText 扩展实现国际化支持</title>
		<link>http://www.setting.cc/blog/archives/3.html</link>
		<comments>http://www.setting.cc/blog/archives/3.html#comments</comments>
		<pubDate>Wed, 16 Dec 2009 03:23:23 +0000</pubDate>
		<dc:creator>Setting Sun</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[gettext]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[locale]]></category>

		<guid isPermaLink="false">http://www.setting.cc/blog/archives/3.html</guid>
		<description><![CDATA[首先，我们构建一个简单的 I18n 工具类 I18n.php：

class I18n
{
    /**
     * 默认语言
     *
     * @var string
     */
    const DEFAULT_LOCALE = 'zh_CN';
    /**
     * 默认编码
     *
  [...]]]></description>
			<content:encoded><![CDATA[<p>首先，我们构建一个简单的 I18n 工具类 I18n.php：</p>
<pre name="code" class="php">
class I18n
{
    /**
     * 默认语言
     *
     * @var string
     */
    const DEFAULT_LOCALE = 'zh_CN';
    /**
     * 默认编码
     *
     * @var string
     */
    const DEFAULT_CHARSET = 'UTF-8';

    /**
     * 单实例对象序列
     *
     * @var array
     */
    private static $instances = array();
    /**
     * 当前语言
     *
     * @var string
     */
    private static $locale;
    /**
     * 当前域
     *
     * @var string
     */
    private $domain;

    /**
     * 格式化索引
     *
     * @param string $key
     * @return string
     */
    public static function quote($key)
    {
    	return '/\{'.$key.'\}/';
    }

    /**
     * 构造函数
     *
     * @param string $domain
     */
    private function __construct($domain)
    {
    	$this->domain = $domain;

    	bind_textdomain_codeset($this->domain, self::DEFAULT_CHARSET);
    	bindtextdomain($this->domain, LOCALE_DIR);
    }

    /**
     * 获取格式化后的文本
     *
     * @param string $key
     * @param array $params
     * @return string
     */
    public function _($key, $params = null)
    {
        $text = dgettext($this->domain, $key);

        if (empty($params))
        {
        	return $text;
        } else {
        	return preg_replace(
        		array_map('I18n::quote', array_keys($params)),
        		array_values($params),
        		$text
        	);
        }
    }

    /**
     * 取得一个单实例I18n对象
     *
     * @param string $domain
     * @return I18n
     */
    public static function getInstance($domain)
    {
    	if (empty(self::$locale))
    	{
    		self::setLocale(self::DEFAULT_LOCALE);
    	}

    	if (!array_key_exists($domain, self::$instances))
        {
            self::$instances[$domain] = new I18n($domain);
        }

        return self::$instances[$domain];
    }

    /**
     * 设置I18n语言
     *
     * @param string $locale
     */
    public static function setLocale($locale)
    {
    	self::$locale = $locale;
        setlocale(LC_ALL, $locale);
    }
}
</pre>
<p>然后我们再生成 2 个用于测试的 po 文件。</p>
<p>首先是中文的语言文件 locale\zh_CN\LC_MESSAGES\message.po:</p>
<pre name="code" class="php">
msgid ""
msgstr ""
"Project-Id-Version: message\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-06-12 17:26+0800\n"
"PO-Revision-Date: 2009-12-15 20:39+0800\n"
"Last-Translator: Zivn <zivn @163.com="">\n"
"Language-Team: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Chinese\n"
"X-Poedit-Country: CHINA\n"
"X-Poedit-SourceCharset: utf-8\n"

msgid "testMsg"
msgstr "这是一条测试信息！你好，{name}！"

msgid "userName"
msgstr "火星梅梅"
</pre>
<p>然后是英文的语言文件 locale\en_US\LC_MESSAGES\message.po:</p>
<pre name="code" class="php">
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-06-12 17:26+0800\n"
"PO-Revision-Date: 2009-12-15 20:40+0800\n"
"Last-Translator: Zivn <zivn @163.com="">\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: English\n"
"X-Poedit-Country: AMERICAN SAMOA\n"
"X-Poedit-SourceCharset: utf-8\n"

msgid "testMsg"
msgstr "This is a test message!Hello,{name}!"

msgid "userName"
msgstr "zivn"
</pre>
<p>记得要生成二进制的 mo 文件哦。</p>
<p>好了，最后是我们用来测试的主文件：</p>
<pre name="code" class="php">
define('ROOT_PATH', realpath('.'));
define('LOCALE_DIR', ROOT_PATH . DIRECTORY_SEPARATOR . 'locale');

$i18n = I18n::getInstance('message');

// Output: 这是一条测试信息！你好，火星梅梅！
echo $i18n->_('testMsg', array('name' => $i18n->_('userName')))."\n";

// Change Locale
I18n::setLocale('en_US');

// Output: This is a test message!Hello,zivn!
echo $i18n->_('testMsg', array('name' => $i18n->_('userName')))."\n";
</pre>
<p>转载自<a href="http://zivn.me/archives/43">http://zivn.me/archives/43</a></p>

	标签：<a href="http://www.setting.cc/blog/tag/gettext" title="gettext" rel="tag nofollow">gettext</a>, <a href="http://www.setting.cc/blog/tag/i18n" title="i18n" rel="tag nofollow">i18n</a>, <a href="http://www.setting.cc/blog/tag/locale" title="locale" rel="tag nofollow">locale</a>, <a href="http://www.setting.cc/blog/tag/php" title="php" rel="tag nofollow">php</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.setting.cc/blog/archives/3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php5.3新加正则功能</title>
		<link>http://www.setting.cc/blog/archives/2.html</link>
		<comments>http://www.setting.cc/blog/archives/2.html#comments</comments>
		<pubDate>Thu, 03 Dec 2009 09:13:04 +0000</pubDate>
		<dc:creator>Setting Sun</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[preg]]></category>

		<guid isPermaLink="false">http://www.setting.cc/blog/archives/2.html</guid>
		<description><![CDATA[
$p = "/^(?.*) (?.*)$/";
$s = "10.4.0.111 2009-09-09";
preg_match($p, $s, $m);
print_r($m);

可以指定返回数组key了

	标签：php, preg
]]></description>
			<content:encoded><![CDATA[<pre name="code" class="php">
$p = "/^(?<ip>.*) (?<time>.*)$/";
$s = "10.4.0.111 2009-09-09";
preg_match($p, $s, $m);
print_r($m);
</pre>
<p>可以指定返回数组key了</p>

	标签：<a href="http://www.setting.cc/blog/tag/php" title="php" rel="tag nofollow">php</a>, <a href="http://www.setting.cc/blog/tag/preg" title="preg" rel="tag nofollow">preg</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.setting.cc/blog/archives/2.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>博客在今天重生了</title>
		<link>http://www.setting.cc/blog/archives/1.html</link>
		<comments>http://www.setting.cc/blog/archives/1.html#comments</comments>
		<pubDate>Sun, 15 Nov 2009 10:24:04 +0000</pubDate>
		<dc:creator>Setting Sun</dc:creator>
				<category><![CDATA[心情随笔]]></category>
		<category><![CDATA[重生]]></category>

		<guid isPermaLink="false">	http://www.setting.cc/blog/archives/1.html</guid>
		<description><![CDATA[前些日子博客挂了，一直没有时间重新弄。。
后来有时间了，发现备份有问题，真是杯具啊。。
既然如此就一切重新开始吧。
打造高品质博文~~~~

	标签：重生
]]></description>
			<content:encoded><![CDATA[<p>前些日子博客挂了，一直没有时间重新弄。。</p>
<p>后来有时间了，发现备份有问题，真是杯具啊。。</p>
<p>既然如此就一切重新开始吧。</p>
<p>打造高品质博文~~~~</p>

	标签：<a href="http://www.setting.cc/blog/tag/%e9%87%8d%e7%94%9f" title="重生" rel="tag nofollow">重生</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.setting.cc/blog/archives/1.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
