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

<channel>
	<title>蓝色骑兵-web技术&#124;网络生活</title>
	<atom:link href="http://wkeke.cn/index.php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.wkeke.cn</link>
	<description>追逐和分享web技术资讯，沉浸并热爱互联网虚拟生活，高擎蓝色大旗，像亚瑟王一样战斗……</description>
	<pubDate>Mon, 16 Apr 2012 14:40:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>tool - dropbox</title>
		<link>http://www.wkeke.cn/archives/dropbox-invite/</link>
		<comments>http://www.wkeke.cn/archives/dropbox-invite/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 14:35:55 +0000</pubDate>
		<dc:creator>cocoa</dc:creator>
		
		<category><![CDATA[Tool]]></category>

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

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

		<guid isPermaLink="false">http://www.wkeke.cn/?p=316</guid>
		<description><![CDATA[Dropbox，很不错的网盘，跨平台，多人协作，同步多终端，一直被模仿，从未被超越。如果你要注册Dropbox账号请点击后面链接，可以多获得额外500M空间。
【dropbox邀请】。


相关文章

2010-05-11 &#8212; 优秀的云存储服务Dropbox遭封杀

]]></description>
			<content:encoded><![CDATA[<p>Dropbox，很不错的网盘，跨平台，多人协作，同步多终端，一直被模仿，从未被超越。如果你要注册Dropbox账号请点击后面链接，<strong>可以多获得额外500M空间</strong>。</p>
<p>【<a title="dropbox邀请" href=" http://db.tt/xgaFc5sC" target="_blank">dropbox邀请</a>】。</p>
</p>
</p>
<h3>相关文章</h3>
<ul class="related_post">
<li>2010-05-11 &#8212; <a href="http://www.wkeke.cn/archives/dropbox-gfw-cn/" title="优秀的云存储服务Dropbox遭封杀">优秀的云存储服务Dropbox遭封杀</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wkeke.cn/archives/dropbox-invite/feed/</wfw:commentRss>
		</item>
		<item>
		<title>关于svn的Can&#8217;t convert string from &#8216;UTF-8&#8242;错误</title>
		<link>http://www.wkeke.cn/archives/svn-cannot-convert-string-from-utf8-to-native-encoding/</link>
		<comments>http://www.wkeke.cn/archives/svn-cannot-convert-string-from-utf8-to-native-encoding/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 08:19:07 +0000</pubDate>
		<dc:creator>cocoa</dc:creator>
		
		<category><![CDATA[shell]]></category>

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

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

		<guid isPermaLink="false">http://www.wkeke.cn/?p=315</guid>
		<description><![CDATA[今天碰到一个svn的问题，记录一下。我不小心在svn托管项目的images目录下提交了一个包含中文文件名的的文件（windows下提交的），然后在linux下执行update命令，就报错：

svn: Can't convert string from 'UTF-8' to native encoding

于是删除了这个包含中文文件名的文件，在windows下再提交，然后在linux下update，还是依然报同样错误。翻阅资料，解决办法如下，执行命令，或是在~/.bashrc中添加：

export LANG="zh_CN.UTF-8"

相关文章

2011-10-11 &#8212; 用screen管理远程会话
2009-03-03 &#8212; Web发展历程中的十件大事

]]></description>
			<content:encoded><![CDATA[<p>今天碰到一个svn的问题，记录一下。我不小心在svn托管项目的images目录下提交了一个包含中文文件名的的文件（windows下提交的），然后在linux下执行update命令，就报错：</p>
<pre name="code" class="shell">
svn: Can't convert string from 'UTF-8' to native encoding
</pre>
<p>于是删除了这个包含中文文件名的文件，在windows下再提交，然后在linux下update，还是依然报同样错误。翻阅资料，解决办法如下，执行命令，或是在~/.bashrc中添加：</p>
<pre name="code" class="shell">
export LANG="zh_CN.UTF-8"
</pre>
<h3>相关文章</h3>
<ul class="related_post">
<li>2011-10-11 &#8212; <a href="http://www.wkeke.cn/archives/linux-screen/" title="用screen管理远程会话">用screen管理远程会话</a></li>
<li>2009-03-03 &#8212; <a href="http://www.wkeke.cn/archives/10-major-in-web-history/" title="Web发展历程中的十件大事">Web发展历程中的十件大事</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wkeke.cn/archives/svn-cannot-convert-string-from-utf8-to-native-encoding/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP接受JSON数据时需要注意魔术引号</title>
		<link>http://www.wkeke.cn/archives/php-post-json-magic-quote/</link>
		<comments>http://www.wkeke.cn/archives/php-post-json-magic-quote/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 17:35:28 +0000</pubDate>
		<dc:creator>cocoa</dc:creator>
		
		<category><![CDATA[DHTML&amp;Javascript]]></category>

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

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

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

		<guid isPermaLink="false">http://www.wkeke.cn/?p=314</guid>
		<description><![CDATA[今天碰到一个问题，前端post一坨已经序列化好的JSON数据，传到后端后，PHP解析不出来，用PHP直接解析一个正常json字符串是好使的。说明PHP接到字符串后做了一些处理，导致json_encode不能解析。首先想到魔术引号，当打开时，所有的 &#8216;（单引号），&#8220;（双引号），\（反斜线）和 NULL 字符都会被自动加上一个反斜线进行转义。这和  addslashes() 作用完全相同。我本地的系统正是因为开启了魔术引号，php接到json字符串后将双引号转义了。通过下面方法解决：




相关文章

2011-01-17 &#8212; preg_replace_callback()调用类中的回调函数
2010-10-16 &#8212; 收集：一些PHP常用技巧
2009-10-31 &#8212; PHP如何读取Javascript escape后的字符串
2009-07-20 &#8212; PHP.INI配置文件中文版说明
2009-06-09 &#8212; 前端控制器FrontController利弊
2009-05-25 &#8212; 哪些迹象证明你还是PHP菜鸟？

]]></description>
			<content:encoded><![CDATA[<p>今天碰到一个问题，前端post一坨已经序列化好的JSON数据，传到后端后，PHP解析不出来，用PHP直接解析一个正常json字符串是好使的。说明PHP接到字符串后做了一些处理，导致json_encode不能解析。首先想到魔术引号，当打开时，所有的 <var class="literal">&#8216;</var>（单引号），<var class="literal">&#8220;</var>（双引号），<var class="literal">\</var>（反斜线）和 <var class="literal">NULL</var> 字符都会被自动加上一个反斜线进行转义。这和  <strong class="function">addslashes()</strong> 作用完全相同。我本地的系统正是因为开启了魔术引号，php接到json字符串后将双引号转义了。通过下面方法解决：</p>
<p><span id="more-314"></span></p>
<pre name="code" class="php">
<?php
$json_str = $_POST["test_json"];
if(ini_get("magic_quotes_gpc")=="1")
{
    $json_str=stripslashes($json_str);
}
$out_arr = json_decode($json_str);
echo var_dump($out_arr);
?>
</pre>
<h3>相关文章</h3>
<ul class="related_post">
<li>2011-01-17 &#8212; <a href="http://www.wkeke.cn/archives/preg_replace_callback_in_php/" title="preg_replace_callback()调用类中的回调函数">preg_replace_callback()调用类中的回调函数</a></li>
<li>2010-10-16 &#8212; <a href="http://www.wkeke.cn/archives/some-php-tips/" title="收集：一些PHP常用技巧">收集：一些PHP常用技巧</a></li>
<li>2009-10-31 &#8212; <a href="http://www.wkeke.cn/archives/php-javascript-escape/" title="PHP如何读取Javascript escape后的字符串">PHP如何读取Javascript escape后的字符串</a></li>
<li>2009-07-20 &#8212; <a href="http://www.wkeke.cn/archives/php-ini-chinese/" title="PHP.INI配置文件中文版说明">PHP.INI配置文件中文版说明</a></li>
<li>2009-06-09 &#8212; <a href="http://www.wkeke.cn/archives/about-front-controller/" title="前端控制器FrontController利弊">前端控制器FrontController利弊</a></li>
<li>2009-05-25 &#8212; <a href="http://www.wkeke.cn/archives/what-are-the-signs-that-you-are-php-rookie/" title="哪些迹象证明你还是PHP菜鸟？">哪些迹象证明你还是PHP菜鸟？</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wkeke.cn/archives/php-post-json-magic-quote/feed/</wfw:commentRss>
		</item>
		<item>
		<title>假期结束，继续上路</title>
		<link>http://www.wkeke.cn/archives/holiday-end-2012/</link>
		<comments>http://www.wkeke.cn/archives/holiday-end-2012/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 06:05:53 +0000</pubDate>
		<dc:creator>cocoa</dc:creator>
		
		<category><![CDATA[Lanqi's Life]]></category>

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

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

		<guid isPermaLink="false">http://www.wkeke.cn/?p=313</guid>
		<description><![CDATA[新年假期结束了，如期上班，重新踏上征程。昨天去了地坛庙会，感受了下老北京的过年气息，但感觉真的不怎么样，那庙会完全是一帮奸商趁着过年这几天拼命忽悠宰游客啊。
去年比较懒，博客没有更新，工作太忙不是借口，希望新年新气象，加强积淀和总结，迈向新征途，希望今年定下的目标一个个都能实现。
相关文章

2011-01-28 &#8212; 新年快乐
2010-02-11 &#8212; 新年快乐

]]></description>
			<content:encoded><![CDATA[<p>新年假期结束了，如期上班，重新踏上征程。昨天去了地坛庙会，感受了下老北京的过年气息，但感觉真的不怎么样，那庙会完全是一帮奸商趁着过年这几天拼命忽悠宰游客啊。</p>
<p>去年比较懒，博客没有更新，工作太忙不是借口，希望新年新气象，加强积淀和总结，迈向新征途，希望今年定下的目标一个个都能实现。<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2011-01-28 &#8212; <a href="http://www.wkeke.cn/archives/happy-new-year-201/" title="新年快乐">新年快乐</a></li>
<li>2010-02-11 &#8212; <a href="http://www.wkeke.cn/archives/happy-new-year/" title="新年快乐">新年快乐</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wkeke.cn/archives/holiday-end-2012/feed/</wfw:commentRss>
		</item>
		<item>
		<title>用screen管理远程会话</title>
		<link>http://www.wkeke.cn/archives/linux-screen/</link>
		<comments>http://www.wkeke.cn/archives/linux-screen/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 15:31:12 +0000</pubDate>
		<dc:creator>cocoa</dc:creator>
		
		<category><![CDATA[shell]]></category>

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

		<guid isPermaLink="false">http://www.wkeke.cn/?p=312</guid>
		<description><![CDATA[在公司经常一进电梯，wifi被屏蔽，准入断掉，ssh终端也断开连接，代码没有及时保存，已经追悔莫及。重新登录之后，原来的状态也已经无法恢复，一堆窗口又要一个个打开，坑爹啊，有木有！！！
其实不用这么烦，有screen命令啊。screen工具是一个终端多路转接器，在本质上，这意味着你能够使用一个单一的终端窗口运行多终端的应用。screen中有会话的概念，用户可以在一个screen会话中创建多个screen窗口，在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。在screen中创建一个新的窗口有这样几种方式：

1．直接在命令行键入screen命令
[root@tivf06 ~]# screen
Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序，就像在ssh窗口中那样。在该窗口中键入exit退出该窗口，如果这是该screen会话的唯一窗口，该screen会话退出，否则screen自动切换到前一个窗口。

2．Screen命令后跟你要执行的程序。
[root@tivf06 ~]# screen vi test.c
Screen创建一个执行vi test.c的单窗口会话，退出vi将退出该窗口/会话。

3．以上两种方式都创建新的screen会话。我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入C-a c，即Ctrl键+a键，之后再按下c键，screen 在该会话内生成一个新的窗口并切换到该窗口。
screen还有更高级的功能。你可以不中断screen窗口中程序的运行而暂时断开（detach）screen会话，并在随后时间重新连接（attach）该会话，重新控制各窗口中运行的程序。例如，我们打开一个screen窗口编辑/tmp/abc文件：

参　　数：
-A 　将所有的视窗都调整为目前终端机的大小。
-d  　将指定的screen作业离线。
-h  　指定视窗的缓冲区行数。
-m 　即使目前已在作业中的screen作业，仍强制建立新的screen作业。
-r  　恢复离线的screen作业。
-R 　先试图恢复离线的作业。若找不到离线的作业，即建立新的screen作业。
-s 　指定建立新视窗时，所要执行的shell。
-S  　指定screen作业的名称。
-v 　显示版本信息。
-x 　恢复之前离线的screen作业。
-ls或&#8211;list 　显示目前所有的screen作业。
-wipe 　检查目前所有的screen作业，并删除已经无法使用的screen作业。

常用screen参数：
screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session

在每个screen session 下，所有命令都以 ctrl+a(C-a) 开始。
C-a ? -> Help，显示简单说明
C-a c -> [...]]]></description>
			<content:encoded><![CDATA[<p>在公司经常一进电梯，wifi被屏蔽，准入断掉，ssh终端也断开连接，代码没有及时保存，已经追悔莫及。重新登录之后，原来的状态也已经无法恢复，一堆窗口又要一个个打开，坑爹啊，有木有！！！<br />
其实不用这么烦，有screen命令啊。screen工具是一个终端多路转接器，在本质上，这意味着你能够使用一个单一的终端窗口运行多终端的应用。screen中有会话的概念，用户可以在一个screen会话中创建多个screen窗口，在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。在screen中创建一个新的窗口有这样几种方式：<br />
<span id="more-312"></span><br />
1．直接在命令行键入screen命令</p>
<p>[root@tivf06 ~]# screen</p>
<p>Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序，就像在ssh窗口中那样。在该窗口中键入exit退出该窗口，如果这是该screen会话的唯一窗口，该screen会话退出，否则screen自动切换到前一个窗口。<br />
<br/><br />
2．Screen命令后跟你要执行的程序。</p>
<p>[root@tivf06 ~]# screen vi test.c</p>
<p>Screen创建一个执行vi test.c的单窗口会话，退出vi将退出该窗口/会话。<br />
<br/><br />
3．以上两种方式都创建新的screen会话。我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入C-a c，即Ctrl键+a键，之后再按下c键，screen 在该会话内生成一个新的窗口并切换到该窗口。</p>
<p>screen还有更高级的功能。你可以不中断screen窗口中程序的运行而暂时断开（detach）screen会话，并在随后时间重新连接（attach）该会话，重新控制各窗口中运行的程序。例如，我们打开一个screen窗口编辑/tmp/abc文件：</p>
<p><br/><br />
<strong>参　　数：</strong><br />
-A 　将所有的视窗都调整为目前终端机的大小。<br />
-d <作业名称> 　将指定的screen作业离线。<br />
-h <行数> 　指定视窗的缓冲区行数。<br />
-m 　即使目前已在作业中的screen作业，仍强制建立新的screen作业。<br />
-r <作业名称> 　恢复离线的screen作业。<br />
-R 　先试图恢复离线的作业。若找不到离线的作业，即建立新的screen作业。<br />
-s 　指定建立新视窗时，所要执行的shell。<br />
-S <作业名称> 　指定screen作业的名称。<br />
-v 　显示版本信息。<br />
-x 　恢复之前离线的screen作业。<br />
-ls或&#8211;list 　显示目前所有的screen作业。<br />
-wipe 　检查目前所有的screen作业，并删除已经无法使用的screen作业。<br />
<br/><br />
<strong>常用screen参数：</strong><br />
screen -S yourname -> 新建一个叫yourname的session<br />
screen -ls -> 列出当前所有的session<br />
screen -r yourname -> 回到yourname这个session<br />
screen -d yourname -> 远程detach某个session<br />
screen -d -r yourname -> 结束当前session并回到yourname这个session<br />
<br/><br />
<strong>在每个screen session 下，所有命令都以 ctrl+a(C-a) 开始。</strong><br />
C-a ? -> Help，显示简单说明<br />
C-a c -> Create，开启新的 window<br />
C-a n -> Next，切换到下个 window<br />
C-a p -> Previous，前一个 window<br />
C-a 0..9 -> 切换到第 0..9 个window<br />
Ctrl+a [Space] -> 由視窗0循序換到視窗9<br />
C-a C-a -> 在两个最近使用的 window 间切换<br />
C-a x -> 锁住当前的 window，需用用户密码解锁<br />
C-a d -> detach，暂时离开当前session，将目前的 screen session (可能含有多个 windows) 丢到后台执行，并会回到还没进 screen 时的状态，此时在 screen session 里    每个 window 内运行的 process (无论是前台/后台)都在继续执行，即使 logout 也不影响。<br />
C-a z -> 把当前session放到后台执行，用 shell 的 fg 命令則可回去。<br />
C-a w -> Windows，列出已开启的 windows 有那些<br />
C-a t -> Time，显示当前时间，和系统的 load<br />
C-a K -> kill window，强行关闭当前的 window<br />
C-a [ -> 进入 copy mode，在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样<br />
    C-b Backward，PageUp<br />
    C-f Forward，PageDown<br />
    H(大写) High，将光标移至左上角<br />
    L Low，将光标移至左下角<br />
    0 移到行首<br />
    $ 行末<br />
    w forward one word，以字为单位往前移<br />
    b backward one word，以字为单位往后移<br />
    Space 第一次按为标记区起点，第二次按为终点<br />
    Esc 结束 copy mode<br />
C-a ] -> Paste，把刚刚在 copy mode 选定的内容贴上<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2012-02-13 &#8212; <a href="http://www.wkeke.cn/archives/svn-cannot-convert-string-from-utf8-to-native-encoding/" title="关于svn的Can&#8217;t convert string from &#8216;UTF-8&#8242;错误">关于svn的Can&#8217;t convert string from &#8216;UTF-8&#8242;错误</a></li>
<li>2009-03-03 &#8212; <a href="http://www.wkeke.cn/archives/10-major-in-web-history/" title="Web发展历程中的十件大事">Web发展历程中的十件大事</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wkeke.cn/archives/linux-screen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>我们的世界需要更多&#8221;地球一小时&#8221;</title>
		<link>http://www.wkeke.cn/archives/earth-hour-2011/</link>
		<comments>http://www.wkeke.cn/archives/earth-hour-2011/#comments</comments>
		<pubDate>Sat, 26 Mar 2011 10:18:36 +0000</pubDate>
		<dc:creator>cocoa</dc:creator>
		
		<category><![CDATA[Focus]]></category>

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

		<guid isPermaLink="false">http://www.wkeke.cn/?p=311</guid>
		<description><![CDATA[又到了“地球一小时”的时间，活动的原生意义在于唤起人们的环保意识，让更多的人能投入环保。但绿色生活在我们的社会大都流于形式，更是成为许多商家坑蒙拐骗的广告语。以破坏环境、竭泽而渔来换取经济回报的现象，在我国遍地都是，我觉得观念以及全民素质在这里起了很大的作用。
希望我们的社会能有更多的“地球一小时”，
希望环保、绿色概念能真正走入寻常百姓家，
希望我们的城市上空不再阴霾，
希望每个人都能呼吸到真正新鲜的空气。
相关文章

2010-03-24 &#8212; 爱护环境从你我做起
2009-03-29 &#8212; 你“地球一小时”了吗？

]]></description>
			<content:encoded><![CDATA[<p>又到了“地球一小时”的时间，活动的原生意义在于唤起人们的环保意识，让更多的人能投入环保。但绿色生活在我们的社会大都流于形式，更是成为许多商家坑蒙拐骗的广告语。以破坏环境、竭泽而渔来换取经济回报的现象，在我国遍地都是，我觉得观念以及全民素质在这里起了很大的作用。</p>
<p>希望我们的社会能有更多的“地球一小时”，</p>
<p>希望环保、绿色概念能真正走入寻常百姓家，</p>
<p>希望我们的城市上空不再阴霾，</p>
<p>希望每个人都能呼吸到真正新鲜的空气。<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2010-03-24 &#8212; <a href="http://www.wkeke.cn/archives/earth-hour-2010/" title="爱护环境从你我做起">爱护环境从你我做起</a></li>
<li>2009-03-29 &#8212; <a href="http://www.wkeke.cn/archives/earth-hour/" title="你“地球一小时”了吗？">你“地球一小时”了吗？</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wkeke.cn/archives/earth-hour-2011/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web开发人员感兴趣的15个开源项目[转载]</title>
		<link>http://www.wkeke.cn/archives/15-web-open-source-project/</link>
		<comments>http://www.wkeke.cn/archives/15-web-open-source-project/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 04:44:40 +0000</pubDate>
		<dc:creator>cocoa</dc:creator>
		
		<category><![CDATA[Web Development]]></category>

		<category><![CDATA[Open Source]]></category>

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

		<guid isPermaLink="false">http://www.wkeke.cn/?p=310</guid>
		<description><![CDATA[如今，构建网站和开发Web应用程序已经不仅要求开发人员是一名优秀的程序员，更需要聪明的程序员。这也就是说，在可能的情况下，重复使用已有的代码和应用程序，而不是自己重头开始。
开源由来已久，并且很多网站的构建也使用了开源。开发人员都知道Linux、Apache、MySQL及 PHP （LAMP）。
但是除那些之外的其他开源项目呢？作为一名Web开发人员，你可以借助诸多可用的项目，以节省开发时间，或提高程序性能。
下面让我们看一下哪些开源项目可供大家免费使用。

【可供使用的新型数据库】
传统上讲，你可能习惯使用MySQL。尽管MySQL是一个非常棒的数据库，但诸多试图解决MySQL存在的问题的新型数据库已经问世。
1. MongoDB
MongoDB就是的“非关系型”数据库之一。它扩展性强、性能高。
2. Apache Cassandra
与MongoDB相似，Apache Cassandra也是一种“非关系型”数据库，它亦扩展性强、性能高。并且能够很好地处理庞大而活跃的数据集。（编注：Facebook用Cassandra来做邮箱搜索。）
更多
根据需要，你还有更多的选择。请参阅维基百科的这个列表。

【缓存数据】
因为需要频繁使用一些数据，所以相比每次去数据库中查询，把这些数据存放在内存中更加合理。这能够大大提高Web应用程序的运行速度。
3. Memcached
Memcached是一种在内存中缓存小型数据块的简单但强大的解决方法。（编注： Facebook运行着成千上万的Memcached服务器，借以及时处理TB级的缓存数据。）
4. Redis
Redis的作用与Memcached相同，但包含更多的特性。例如，它也可以存储本应当永久性保存在磁盘上的数据。

【加快网络请求的速度】
大多数网站使用Apache的网络服务器来提供服务。它能够很好地服务于大多数网站，但是一旦网站的访问量增大，就需要做进一步优化。
5. Nginx
Nginx是一种与Apache非常相像的网络服务器，但它的速度相当快。作为负载平衡器，它常用于处理静态内容，如图像文件。
6. Varnish
Varnish是位于常规网络服务器之前的高速缓存器。它将所有热门内容放入内存，直接对其处理，无须将所有内容都传给网络服务器。（编注： Facebook用Varnish 处理图片和用户照片，每天都要处理十亿级的请求。Facebook所用到的其他开源项目，请参阅《揭秘Facebook背后的那些软件》一文。）

【轻松管理内容】
如果你在构建一个允许用户添加及编辑内容的网站，那么你可能需要一个内容管理系统（CMS）。CMS能够帮助开发人员轻松地管理博客及网站，并且提供大量的能够扩展网站功能的插件。
7. WordPress
虽然WordPress是个博客平台，但它也能用于管理大大小小的网站。
8. Drupal
Drupal是一个可用于构建强扩展性、高灵活性网站的完整平台。
更多
还有很多可用的内容管理系统。请参阅维基百科的这个大型列表。

【交互式的网络UI】
如今，你可以使用JavaScript和AJAX技术，开发一个类似桌面应用程序那样的以多种方式运行的网络应用。使用JavaScript框架，能够轻松地开发大型的网络应用程序。
9. JQuery
JQuery是一个带插件的框架，这些插件有主构建包含AJAX交互及动画的动态网站。
10. MooTools
MooTools就和jQuery一样，是一个使用JavaScript构建强大网络应用程序的框架。
更多
如果你想尝试一下其他选择，请参考维基百科的这个列表。

【其他比较炫的资源】
当你开始开发一个复杂的网络应用程序时，很多软件、库及模型能够帮你解决难题，如果不参考这些资源，你可能会花费大量的时间。以下是两个入门的例子。
11.  Node.js
Node.js是一个事件驱动的输入/输出框架，支持用JavaScript编写应用程序，并在V8 JavaScript引擎上运行。这是一种开发快速、可扩展网络程序的很棒的方式。
12. RabbitMQ
RabbitMQ是一种可靠的、可扩展的信息传送系统，它能够处理高吞吐量。如果需要在系统之间或应用程序之间交换数据，比起传统的解决方案或直接将数据存储在数据库中，信息传送系统的更能胜任这一工作。

【使用框架来加速开发进程】
不管你是使用PHP还是其他的编程语言，有很多不同的可用框架能够帮助你加速开发进程，并能够更加轻松地管理代码。
13. Symfony
Symfony是一个PHP框架，它包含很多能够加速开发复杂网络应用程序的组件及工具。同时它包含社区提供的1000多个插件。
14. Ruby on Rails
对Ruby语言而言，Ruby on Rails是最流行的可用框架。
15. Django
Django是一个Python网络框架，它用来帮助快速开发高性能、优秀的网络应用程序。
更多
维基百科上有一份更完整的列表，这个列表包含不同语言的可用网络应用框架。

【后话 - 合理利用时间】
开发人员有必要花费时间不断了解哪些新软件是可用的，这样对轻松地解决复杂的任务大有裨益。
而且在项目开发之初，花费一些时间做计划和调查也是非常有必要的，因为这样可以明确即将面临的问题，并确定其最佳解决方案。
自己编程来解决每个问题的时代已经结束，如今更多的是灵活使用现有技术来解决问题。
不知正在看本文的Web开发人员，在上述这些开源项目中，你用到了哪些？欢迎你在评论中分享你的使用经验和心得。
原文地址：http://www.javaeye.com/news/20144
相关文章

2010-12-15 &#8212; O&#8217;Reilly Velocity China 2010
2009-07-05 &#8212; Web开发与设计师速查手册汇集(二)
2009-07-05 &#8212; Web开发与设计师速查手册汇集(一)
2009-06-05 &#8212; 关于Web测试的一些Tips
2009-04-18 &#8212; web架构设计
2009-04-04 &#8212; 主流的开源Flash3D框架

]]></description>
			<content:encoded><![CDATA[<p>如今，构建网站和开发Web应用程序已经不仅要求开发人员是一名优秀的程序员，更需要聪明的程序员。这也就是说，在可能的情况下，重复使用已有的代码和应用程序，而不是自己重头开始。</p>
<p>开源由来已久，并且很多网站的构建也使用了开源。开发人员都知道Linux、Apache、MySQL及 PHP （LAMP）。</p>
<p>但是除那些之外的其他开源项目呢？作为一名Web开发人员，你可以借助诸多可用的项目，以节省开发时间，或提高程序性能。</p>
<p>下面让我们看一下哪些开源项目可供大家免费使用。<span id="more-310"></span><br />
<br/><br />
<span style="font-size: small;"><strong>【可供使用的新型数据库】</strong></span></p>
<p>传统上讲，你可能习惯使用MySQL。尽管MySQL是一个非常棒的数据库，但诸多试图解决MySQL存在的问题的新型数据库已经问世。</p>
<p><strong>1. MongoDB</strong></p>
<p>MongoDB就是的“非关系型”数据库之一。它扩展性强、性能高。</p>
<p><strong>2. Apache Cassandra</strong></p>
<p>与MongoDB相似，Apache Cassandra也是一种“非关系型”数据库，它亦扩展性强、性能高。并且能够很好地处理庞大而活跃的数据集。（编注：Facebook用Cassandra来做邮箱搜索。）</p>
<p><strong>更多</strong></p>
<p>根据需要，你还有更多的选择。<a rel="nofollow" href="http://en.wikipedia.org/wiki/Category:Open_source_database_management_systems" target="_blank">请参阅维基百科的这个列表</a>。<br />
<br/><br />
<span style="font-size: small;"><strong>【缓存数据】</strong></span></p>
<p>因为需要频繁使用一些数据，所以相比每次去数据库中查询，把这些数据存放在内存中更加合理。这能够大大提高Web应用程序的运行速度。</p>
<p><strong>3. Memcached</strong></p>
<p>Memcached是一种在内存中缓存小型数据块的简单但强大的解决方法。（编注： Facebook运行着成千上万的Memcached服务器，借以及时处理TB级的缓存数据。）</p>
<p><strong>4. Redis</strong></p>
<p>Redis的作用与Memcached相同，但包含更多的特性。例如，它也可以存储本应当永久性保存在磁盘上的数据。<br />
<br/><br />
<span style="font-size: small;"><strong>【加快网络请求的速度】</strong></span></p>
<p>大多数网站使用Apache的网络服务器来提供服务。它能够很好地服务于大多数网站，但是一旦网站的访问量增大，就需要做进一步优化。</p>
<p><strong>5. Nginx</strong></p>
<p>Nginx是一种与Apache非常相像的网络服务器，但它的速度相当快。作为负载平衡器，它常用于处理静态内容，如图像文件。</p>
<p><strong>6. Varnish</strong></p>
<p>Varnish是位于常规网络服务器之前的高速缓存器。它将所有热门内容放入内存，直接对其处理，无须将所有内容都传给网络服务器。（编注： Facebook用Varnish 处理图片和用户照片，每天都要处理十亿级的请求。Facebook所用到的其他开源项目，请参阅《<a href="http://www.jobbole.com/entry.php/73" target="_blank">揭秘Facebook背后的那些软件</a>》一文。）<br />
<br/><br />
<span style="font-size: small;"><strong>【轻松管理内容】</strong></span></p>
<p>如果你在构建一个允许用户添加及编辑内容的网站，那么你可能需要一个内容管理系统（CMS）。CMS能够帮助开发人员轻松地管理博客及网站，并且提供大量的能够扩展网站功能的插件。</p>
<p><strong>7. WordPress</strong></p>
<p>虽然WordPress是个博客平台，但它也能用于管理大大小小的网站。</p>
<p><strong>8. Drupal</strong></p>
<p>Drupal是一个可用于构建强扩展性、高灵活性网站的完整平台。</p>
<p><strong>更多</strong></p>
<p>还有很多可用的内容管理系统。<a rel="nofollow" href="http://en.wikipedia.org/wiki/List_of_content_management_systems" target="_blank">请参阅维基百科的这个大型列表</a>。<br />
<br/><br />
<span style="font-size: small;"><strong>【交互式的网络UI】</strong></span></p>
<p>如今，你可以使用JavaScript和AJAX技术，开发一个类似桌面应用程序那样的以多种方式运行的网络应用。使用JavaScript框架，能够轻松地开发大型的网络应用程序。</p>
<p><strong>9. JQuery</strong></p>
<p>JQuery是一个带插件的框架，这些插件有主构建包含AJAX交互及动画的动态网站。</p>
<p><strong>10. MooTools</strong></p>
<p>MooTools就和jQuery一样，是一个使用JavaScript构建强大网络应用程序的框架。</p>
<p><strong>更多</strong></p>
<p>如果你想尝试一下其他选择，<a rel="nofollow" href="http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworks" target="_blank">请参考维基百科的这个列表</a>。<br />
<br/><br />
<span style="font-size: small;"><strong>【其他比较炫的资源】</strong></span></p>
<p>当你开始开发一个复杂的网络应用程序时，很多软件、库及模型能够帮你解决难题，如果不参考这些资源，你可能会花费大量的时间。以下是两个入门的例子。</p>
<p><strong>11.  Node.js</strong></p>
<p>Node.js是一个事件驱动的输入/输出框架，支持用JavaScript编写应用程序，并在V8 JavaScript引擎上运行。这是一种开发快速、可扩展网络程序的很棒的方式。</p>
<p><strong>12. RabbitMQ</strong></p>
<p>RabbitMQ是一种可靠的、可扩展的信息传送系统，它能够处理高吞吐量。如果需要在系统之间或应用程序之间交换数据，比起传统的解决方案或直接将数据存储在数据库中，信息传送系统的更能胜任这一工作。<br />
<br/><br />
<span style="font-size: small;"><strong>【使用框架来加速开发进程】</strong></span></p>
<p>不管你是使用PHP还是其他的编程语言，有很多不同的可用框架能够帮助你加速开发进程，并能够更加轻松地管理代码。</p>
<p><strong>13. Symfony</strong></p>
<p>Symfony是一个PHP框架，它包含很多能够加速开发复杂网络应用程序的组件及工具。同时它包含社区提供的1000多个插件。</p>
<p><strong>14. Ruby on Rails</strong></p>
<p>对Ruby语言而言，Ruby on Rails是最流行的可用框架。</p>
<p><strong>15. Django</strong></p>
<p>Django是一个Python网络框架，它用来帮助快速开发高性能、优秀的网络应用程序。</p>
<p><strong>更多</strong></p>
<p>维基百科上有一份更完整的列表，<a rel="nofollow" href="http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks" target="_blank">这个列表包含不同语言的可用网络应用框架。</a><br />
<br/><br />
<span style="font-size: small;"><strong>【后话 - 合理利用时间】</strong></span></p>
<p>开发人员有必要花费时间不断了解哪些新软件是可用的，这样对轻松地解决复杂的任务大有裨益。</p>
<p>而且在项目开发之初，花费一些时间做计划和调查也是非常有必要的，因为这样可以明确即将面临的问题，并确定其最佳解决方案。</p>
<p>自己编程来解决每个问题的时代已经结束，如今更多的是灵活使用现有技术来解决问题。</p>
<p>不知正在看本文的Web开发人员，在上述这些开源项目中，你用到了哪些？欢迎你在评论中分享你的使用经验和心得。</p>
<p>原文地址：http://www.javaeye.com/news/20144<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2010-12-15 &#8212; <a href="http://www.wkeke.cn/archives/oreilly-velocity-china-2010/" title="O&#8217;Reilly Velocity China 2010">O&#8217;Reilly Velocity China 2010</a></li>
<li>2009-07-05 &#8212; <a href="http://www.wkeke.cn/archives/web-cheep-sheet-2/" title="Web开发与设计师速查手册汇集(二)">Web开发与设计师速查手册汇集(二)</a></li>
<li>2009-07-05 &#8212; <a href="http://www.wkeke.cn/archives/web-cheet-sheet/" title="Web开发与设计师速查手册汇集(一)">Web开发与设计师速查手册汇集(一)</a></li>
<li>2009-06-05 &#8212; <a href="http://www.wkeke.cn/archives/some-tips-about-web-test/" title="关于Web测试的一些Tips">关于Web测试的一些Tips</a></li>
<li>2009-04-18 &#8212; <a href="http://www.wkeke.cn/archives/web-architecture-design/" title="web架构设计">web架构设计</a></li>
<li>2009-04-04 &#8212; <a href="http://www.wkeke.cn/archives/flash3d-engine/" title="主流的开源Flash3D框架">主流的开源Flash3D框架</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wkeke.cn/archives/15-web-open-source-project/feed/</wfw:commentRss>
		</item>
		<item>
		<title>利用GAE搭建blog程序</title>
		<link>http://www.wkeke.cn/archives/google-gae-micolog/</link>
		<comments>http://www.wkeke.cn/archives/google-gae-micolog/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 17:07:32 +0000</pubDate>
		<dc:creator>cocoa</dc:creator>
		
		<category><![CDATA[Focus]]></category>

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

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

		<guid isPermaLink="false">http://www.wkeke.cn/?p=309</guid>
		<description><![CDATA[GAE真的是个非常好的平台，能用来做很多事情。我平时就用它搭的代理来翻墙。今天准备在GAE上搭个blog玩玩，好像Micolog口碑很好，就使用了这款程序，在本地安装调试时出现了如下错误：
import _multiprocessing

ImportError: No module named _multiprocessing
但发布到GAE上是没有问题的。在网上发现很多人也遇到这个问题，应该是python版本的问题，我本地的python版本是2.6.2，官方的python版本是2.5，GAE还不能很好地支持python2.6.2。
对于本地调试出现的上面这个问题，也是有解决之道的：
在根目录下新建一个名为_multiprocessing.py的文件，写入一行代码即可：import multiprocessing
相关文章

2009-04-08 &#8212; 利用Google Appengine 架设自己的专属proxy服务器
2010-09-27 &#8212; Google生日快乐
2010-03-23 &#8212; 我们离世界有多远-再别google
2010-01-16 &#8212; 杯具洗具餐具
2009-09-26 &#8212; Adobe Flash 面对的挑战
2009-07-28 &#8212; 谷歌对决微软的10大战场

]]></description>
			<content:encoded><![CDATA[<p>GAE真的是个非常好的平台，能用来做很多事情。我平时就用它搭的代理来翻墙。今天准备在GAE上搭个blog玩玩，好像Micolog口碑很好，就使用了这款程序，在本地安装调试时出现了如下错误：</p>
<pre>import _multiprocessing

ImportError: No module named _multiprocessing</pre>
<p>但发布到GAE上是没有问题的。在网上发现很多人也遇到这个问题，应该是python版本的问题，我本地的python版本是2.6.2，官方的python版本是2.5，GAE还不能很好地支持python2.6.2。</p>
<p>对于本地调试出现的上面这个问题，也是有解决之道的：</p>
<p>在根目录下新建一个名为_multiprocessing.py的文件，写入一行代码即可：import multiprocessing<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2009-04-08 &#8212; <a href="http://www.wkeke.cn/archives/google-appengine-proxy-gapproxy/" title="利用Google Appengine 架设自己的专属proxy服务器">利用Google Appengine 架设自己的专属proxy服务器</a></li>
<li>2010-09-27 &#8212; <a href="http://www.wkeke.cn/archives/google-happy-birthday/" title="Google生日快乐">Google生日快乐</a></li>
<li>2010-03-23 &#8212; <a href="http://www.wkeke.cn/archives/bye-google/" title="我们离世界有多远-再别google">我们离世界有多远-再别google</a></li>
<li>2010-01-16 &#8212; <a href="http://www.wkeke.cn/archives/baidu-google/" title="杯具洗具餐具">杯具洗具餐具</a></li>
<li>2009-09-26 &#8212; <a href="http://www.wkeke.cn/archives/challenges-adobe-flash-facing/" title="Adobe Flash 面对的挑战">Adobe Flash 面对的挑战</a></li>
<li>2009-07-28 &#8212; <a href="http://www.wkeke.cn/archives/10-battlefield-of-google-vs-microsoft/" title="谷歌对决微软的10大战场">谷歌对决微软的10大战场</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wkeke.cn/archives/google-gae-micolog/feed/</wfw:commentRss>
		</item>
		<item>
		<title>新年快乐</title>
		<link>http://www.wkeke.cn/archives/happy-new-year-201/</link>
		<comments>http://www.wkeke.cn/archives/happy-new-year-201/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 07:41:51 +0000</pubDate>
		<dc:creator>cocoa</dc:creator>
		
		<category><![CDATA[Lanqi's Life]]></category>

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

		<guid isPermaLink="false">http://www.wkeke.cn/?p=308</guid>
		<description><![CDATA[农历新年马上就要到了，现在还在公司，傍晚就要开始赶赴老家的旅程，预祝家人们身体倍棒，吃嘛嘛香，预祝各位 2011神马困难都是浮云，神马表现都要给力，神马梦想都能实现！
相关文章

2012-01-29 &#8212; 假期结束，继续上路
2010-02-11 &#8212; 新年快乐

]]></description>
			<content:encoded><![CDATA[<p>农历新年马上就要到了，现在还在公司，傍晚就要开始赶赴老家的旅程，预祝家人们身体倍棒，吃嘛嘛香，预祝各位 2011神马困难都是浮云，神马表现都要给力，神马梦想都能实现！<br />
<h3>相关文章</h3>
<ul class="related_post">
<li>2012-01-29 &#8212; <a href="http://www.wkeke.cn/archives/holiday-end-2012/" title="假期结束，继续上路">假期结束，继续上路</a></li>
<li>2010-02-11 &#8212; <a href="http://www.wkeke.cn/archives/happy-new-year/" title="新年快乐">新年快乐</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wkeke.cn/archives/happy-new-year-201/feed/</wfw:commentRss>
		</item>
		<item>
		<title>preg_replace_callback()调用类中的回调函数</title>
		<link>http://www.wkeke.cn/archives/preg_replace_callback_in_php/</link>
		<comments>http://www.wkeke.cn/archives/preg_replace_callback_in_php/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 13:44:06 +0000</pubDate>
		<dc:creator>cocoa</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.wkeke.cn/?p=307</guid>
		<description><![CDATA[最近项目中使用preg_replace_callback，需要使用它执行正则匹配时回调类中的方法，需要有一些注意的地方，做个记录。PHP文档中这样介绍 preg_replace_callback：(PHP 4 >= 4.0.5, PHP 5中可以使用)，该方法用回调函数执行正则表达式的搜索和替换，本函数的行为几乎和 preg_replace() 一样，除了不是提供一个 replacement 参数，而是指定一个 callback 函数。该函数将以目标字符串中的匹配数组作为输入参数，并返回用于替换的字符串。
所以，我们可以这样使用这个函数，下面是PHP手册中的例子：

  // 此文本是用于 2002 年的，
  // 现在想使其能用于 2003 年
  $text = "April fools day is 04/01/2002\n";
  $text.= "Last christmas was 12/24/2001\n";

  // 回调函数
  function next_year($matches) {
    // 通常：$matches[0] 是完整的匹配项
    // $matches[1] [...]]]></description>
			<content:encoded><![CDATA[<p>最近项目中使用preg_replace_callback，需要使用它执行正则匹配时回调类中的方法，需要有一些注意的地方，做个记录。PHP文档中这样介绍 preg_replace_callback：(PHP 4 >= 4.0.5, PHP 5中可以使用)，该方法用回调函数执行正则表达式的搜索和替换，本函数的行为几乎和 preg_replace() 一样，除了不是提供一个 replacement 参数，而是指定一个 callback 函数。该函数将以目标字符串中的匹配数组作为输入参数，并返回用于替换的字符串。<span id="more-307"></span></p>
<p>所以，我们可以这样使用这个函数，下面是PHP手册中的例子：</p>
<pre name="code" class="php">
  // 此文本是用于 2002 年的，
  // 现在想使其能用于 2003 年
  $text = "April fools day is 04/01/2002\n";
  $text.= "Last christmas was 12/24/2001\n";

  // 回调函数
  function next_year($matches) {
    // 通常：$matches[0] 是完整的匹配项
    // $matches[1] 是第一个括号中的子模式的匹配项
    // 以此类推
    return $matches[1].($matches[2]+1);
  }

  echo preg_replace_callback(
              "|(\d{2}/\d{2}/)(\d{4})|",
              "next_year",
              $text);

  // 结果为：
  // April fools day is 04/01/2003
  // Last christmas was 12/24/2002
</pre>
<p>这么使用的确没有问题。</p>
<p>但是如果像下面那样在类中调用，就会报错。</p>
<pre name="code" class="php">
//此文本是用于 2002 年的，
//现在想使其能用于 2003 年
$text = "April fools day is 04/01/2002n";
$text.= "Last christmas was 12/24/2001n";

class ParseDate {
	// 回调函数
	function next_year($matches) {
		// 通常：$matches[0] 是完整的匹配项
		// $matches[1] 是第一个括号中的子模式的匹配项
		// 以此类推
		return $matches[1].($matches[2]+1);
	}

	function displayText($text) {
		echo preg_replace_callback(
			"|(d{2}/d{2}/)(d{4})|",
			"$this->next_year",
			$text);
	}
}

$pt = new ParseText();
$pt->displayText($text);
</pre>
<p>上 面的程序执行的结果会是 preg_replace_callback() requires argument 2, [&#8230;],to be a valid callback 。为什么会这样？让我们再看一次PHP文档对于preg_replace_callback()函数的定义：</p>
<p><strong>mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] )</strong></p>
<p>仔细看第二个参数callback，并不是字符串类型，而是callback这个伪类型！看看PHP的文档是怎么定义callback这个伪类型的：</p>
<p><strong>callback:</strong><br />
有些诸如 call_user_function() 或 usort() 的函数接受用户自定义的函数作为一个参数。Callback 函数不仅可以是一个简单的函数，它还可以是一个对象的方法，包括静态类的方法。</p>
<p>一个 PHP 函数用函数名字符串来传递。可以传递任何内置的或者用户自定义的函数，除了 array()，echo()，empty()，eval()，exit()，isset()，list()，print() 和 unset()。</p>
<p><strong>一个对象的方法以数组的形式来传递，数组的下标 0 指明对象名，下标 1 指明方法名。</strong></p>
<p><strong>对于没有实例化为对象的静态类，要传递其方法，将数组 0 下标指明的对象名换成该类的名称即可。</strong></p>
<p>如果是要调用对象的方法函数，那么就要用数组的形式来传递。在上面的程序段中，我们错误的想当然的使用了字符串的形式，所以导致PHP无法找到我们想要使用的回调函数。</p>
<p>知道了原因，就好办了，只要简单的把代码改成<br />
preg_replace_callback(&#8221;|(d{2}/d{2}/)(d{4})|&#8221;,array( &#038;$this, &#8216;next_year&#8217;), $text);<br />
就应该可以正常运行了。下面是完整的代码。</p>
<pre name="code" class="php">
// 此文本是用于 2002 年的，
// 现在想使其能用于 2003 年
$text = "April fools day is 04/01/2002n";
$text.= "Last christmas was 12/24/2001n";

class ParseDate {
	// 回调函数
	function next_year($matches) {
		// 通常：$matches[0] 是完整的匹配项
		// $matches[1] 是第一个括号中的子模式的匹配项
		// 以此类推
		return $matches[1].($matches[2]+1);
	}

	function displayText($text) {
		echo preg_replace_callback(
			"|(d{2}/d{2}/)(d{4})|",
			array( &#038;$this, 'next_year'),
			$text);
	}
}

$pt = new ParseText();
$pt->displayText($text);
</pre>
<h3>相关文章</h3>
<ul class="related_post">
<li>2012-02-02 &#8212; <a href="http://www.wkeke.cn/archives/php-post-json-magic-quote/" title="PHP接受JSON数据时需要注意魔术引号">PHP接受JSON数据时需要注意魔术引号</a></li>
<li>2010-10-16 &#8212; <a href="http://www.wkeke.cn/archives/some-php-tips/" title="收集：一些PHP常用技巧">收集：一些PHP常用技巧</a></li>
<li>2009-10-31 &#8212; <a href="http://www.wkeke.cn/archives/php-javascript-escape/" title="PHP如何读取Javascript escape后的字符串">PHP如何读取Javascript escape后的字符串</a></li>
<li>2009-07-20 &#8212; <a href="http://www.wkeke.cn/archives/php-ini-chinese/" title="PHP.INI配置文件中文版说明">PHP.INI配置文件中文版说明</a></li>
<li>2009-06-09 &#8212; <a href="http://www.wkeke.cn/archives/about-front-controller/" title="前端控制器FrontController利弊">前端控制器FrontController利弊</a></li>
<li>2009-05-25 &#8212; <a href="http://www.wkeke.cn/archives/what-are-the-signs-that-you-are-php-rookie/" title="哪些迹象证明你还是PHP菜鸟？">哪些迹象证明你还是PHP菜鸟？</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wkeke.cn/archives/preg_replace_callback_in_php/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

