<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[kakapo's nest]]></title> 
<link>http://www.kakapo.cn/blog/index.php</link> 
<description><![CDATA[My Technical Knowledge Management System]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[kakapo's nest]]></copyright>
<item>
<link>http://www.kakapo.cn/blog/read.php?169</link>
<title><![CDATA[利用Gearman架构分布式lamp计算服务]]></title> 
<author>kakapo &lt;kakapowu@gmail.com&gt;</author>
<category><![CDATA[Gearman]]></category>
<pubDate>Wed, 28 Jul 2010 05:36:00 +0000</pubDate> 
<guid>http://www.kakapo.cn/blog/read.php?169</guid> 
<description>
<![CDATA[ 
	Gearman是一种分布式的计算技术，一种可以发送任务给其他服务器，或者进程的通用的应用框架，比消息队列系统,web service更高级。<br/><br/>特点：开源，简单快速，多语言支持，跨平台，无单点故障<br/><br/>用途：<br/>1、搭建分布式的应用环境；<br/>2、整合多语言的系统；<br/>3、提供同步或者异步的队列机制；<br/>4、提供并行计算支持<br/><br/>架构图<br/><a href="http://www.kakapo.cn/blog/attachment.php?fid=16" target="_blank"><img src="http://www.kakapo.cn/blog/attachment.php?fid=16" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Gearman本身不做计算，只是启用了守护进程接收来自client端和worker端的消息，它并不push消息，而是等着client端和worker端来pull，并可持续的保存消息队列。<br/><br/>流程图<br/><a href="http://www.kakapo.cn/blog/attachment.php?fid=17" target="_blank"><img src="http://www.kakapo.cn/blog/attachment.php?fid=17" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>worker其实不一定需要一直是作为守护进程去接收来自server端的消息，任何时候启动worker，它都可以主动去server端接收任务，并处理。这可以理解为异步的过程。这跟web service是有很大的区别。<br/><br/><br/>负载均衡设计图<br/><a href="http://www.kakapo.cn/blog/attachment.php?fid=18" target="_blank"><img src="http://www.kakapo.cn/blog/attachment.php?fid=18" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><br/>Yahoo! 和Digg 于2008年对Gearman用C进行重写，并开发了很多语言的client和worker的APIs，并且还支持MySQL的UDF。<br/>安装和使用都非常简单，直接看快速入门，虽然是英文，也是很容易理解；<br/><br/>快速入门 <a href="http://gearman.org/index.php?id=getting_started" target="_blank">http://gearman.org/index.php?id=getting_started</a><br/><br/>官网:http://gearman.org<br/><br/><br/><br/>Tags - <a href="http://www.kakapo.cn/blog/tag.php?tag=%25E5%2588%2586%25E5%25B8%2583%25E5%25BC%258F" rel="tag">分布式</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=distributed" rel="tag">distributed</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=%25E5%25B9%25B6%25E8%25A1%258Cparallel" rel="tag">并行parallel</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=%25E5%2586%2597%25E4%25BD%2599redundance" rel="tag">冗余redundance</a>
]]>
</description>
</item><item>
<link>http://www.kakapo.cn/blog/read.php?167</link>
<title><![CDATA[标签云介绍]]></title> 
<author>kakapo &lt;kakapowu@gmail.com&gt;</author>
<category><![CDATA[Javascript]]></category>
<pubDate>Fri, 23 Jul 2010 08:42:24 +0000</pubDate> 
<guid>http://www.kakapo.cn/blog/read.php?167</guid> 
<description>
<![CDATA[ 
	一种是flash方式：<br/><a href="http://www.kakapo.cn/blog/attachment.php?fid=14" target="_blank"><img src="http://www.kakapo.cn/blog/attachment.php?fid=14" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>官网：http://www.roytanck.com/2008/05/19/how-to-repurpose-my-tag-cloud-flash-movie/<br/><br/>目前的官方版本对多字节,unicode的支持不行，比如中文无法显示。<br/><br/>不过效果是很好的，在wordpress是很出名的plugin。<br/><br/>google找了一个破解版本支持了中文，在附件会提供下载<a href="attachment.php?fid=19">点击这里下载文件</a><br/><br/>一种是javascript方式：<br/><a href="http://www.kakapo.cn/blog/attachment.php?fid=15" target="_blank"><img src="http://www.kakapo.cn/blog/attachment.php?fid=15" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>官网：http://jeroenvanwarmerdam.nl/content/resources/javascript/jscumulus/jscumulus.aspx<br/>官方的版本效果差点，如example :http://jeroenvanwarmerdam.nl/content/resources/javascript/jscumulus/js-cumulus.html<br/><br/>我研究使用了一下，加了一下overflow；<br/><a href="attachment.php?fid=13">点击这里下载文件</a><br/><br/><br/>Tags - <a href="http://www.kakapo.cn/blog/tag.php?tag=tag" rel="tag">tag</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=%25E6%25A0%2587%25E7%25AD%25BE" rel="tag">标签</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=%25E4%25BA%2591" rel="tag">云</a>
]]>
</description>
</item><item>
<link>http://www.kakapo.cn/blog/read.php?166</link>
<title><![CDATA[可怕的两周岁]]></title> 
<author>kakapo &lt;kakapowu@gmail.com&gt;</author>
<category><![CDATA[生活感悟]]></category>
<pubDate>Wed, 21 Jul 2010 03:32:27 +0000</pubDate> 
<guid>http://www.kakapo.cn/blog/read.php?166</guid> 
<description>
<![CDATA[ 
	可怕的两周岁<br/>　或许你的宝宝昨天还是天使，今天就开始成为挑战你忍耐力的恶魔。斯波克有句话形容2岁的孩子，说“可怕的两周岁”，听上去有些匪疑所思。但是，不可否认，孩子这时候会有许多矛盾的特点：既有依赖性，又有独立性；既可爱又可恶；既大方又自私。有许多令人兴奋的事情都发生在这个阶段，所以该阶段无论对父母还是孩子都是一个挑战。<br/><br/>■ 心理探秘<br/>这个时期的宝宝正处于独立期，开始表现出自发性。想睡觉了、肚子饿了、感到疲倦了、对自己能力未达到理想状态等，一点小事情都可能引起宝宝发脾气。这就是“可怕的两岁儿”，他正在渡过他人生里的第一次反抗期。<br/><br/>■ 理解这个时期的孩子<br/>首先父母要理解宝宝在这个时期的拗劲，他们并非想故意和你作对，是心理发育的不平衡使他天性如此。创造一个良好的家庭环境本身就会使宝宝减少任性。父母平时应尽量避免对他的环境做较大的变化，因为这种超过他心理接受能力的外界刺激会使宝宝感到总是无法预料和处理即将发生的变化。这让他恼怒、害怕，只能以哭闹来应付这些变化。当然在原则性问题上，我们的确主张家长要制定一些严格的规定，但你要仔细考虑这些规定的内容和适用范围。<br/><br/>■ 妈妈的妙招<br/>宝宝总会长大，也总会进入这个“难搞”的两岁，就让我们来看看各家妈妈们是怎样机智地应对宝宝的反抗期。<br/>贴心提示：<br/>1．提前预留充足的时间让宝宝自己动手，在打算帮忙而宝宝说“不”时，就放手让他自己去做；<br/>2．面对宝宝的发脾气，爸妈要找清原因，区分宝宝需求的合理性，坚持一定的原则，让宝宝学会自己控制情绪，不能一味让步，否则容易使宝宝任性； 　　<br/>3．多给宝宝一些动眼动脑和动手的机会，让他自己去感受去实践，有利于开发宝宝的智力； 　　<br/>4．经常聆听宝宝的讲话，让宝宝表达自己的想法，对宝宝的心灵成长起极大的作用。<br/><br/>■ 对孩子的过分要求给以拒绝时要注意你的方式<br/>很多家长误认为拒绝孩子就是简单冷漠地说声“不行”或者给予一顿暴打。其实对孩子来说，妈妈置之不理的表情和实际行动比语言更有效。等他安静下来，妈妈再主动邀请他玩新游戏，或把他心爱的玩具拿给他，以转移他的注意力。换句话说，对待宝宝的过分任性，要立场坚定，态度亲切。<br/>- 紫菜不仅含铁丰富，而且含维生素B12，铁和维生素B12都是造血所必需的营养素。可以适量给孩子添加紫菜。紫菜每次食用15克为好。为清除污染、毒素，食用前最好用清水泡发，并换一两次水。胃肠消化功能不好或者腹痛便溏的宝宝应少吃紫菜。<br/><br/>违拗症&nbsp;&nbsp;<br/>　　 孩子到了两三岁的时候，好象是天性促使他们自己做决定，而不允许他人干涉。但是这么大的孩子认识世界毕竟有限，因此在自行做决定和反对外来压力时心里很紧张。正因如此，要想和两三岁的宝宝友好相处可不是一件容易的事。<br/><br/>■ 就爱说“不！”<br/>无疑，这就是所谓的违拗症，或是对父母权威的挑战。违拗症是一种经常发生的相当正常但却令人痛苦的行为，在孩子的第2年中至少会持续6个月。在某种意义上，这个阶段可以说是青春期的预演。在他们简单的人生当中，宝宝第一次开始认识到自己是个独立的人。当你让宝宝把某个东西还给你，而他抓着那个东西不放，并说“不，我的”，你就会知道他已经有了自我意识。随着他会说的词汇的增加，他会开始使用自己的名字，对自己的玩具表现出占有欲，开始对衣服有所挑剔，并且开始抗拒你的一些简单要求。他会开始要看看违背你的意志的后果。“不”这个词对他充满了魅力。<br/>孩子拒绝做你想要他做的事情是完全正常的。他这么做并非有意让你生气或是故意违抗你的意旨。他之所以这么做是因为他发现原来自己也是一个个体，他正在尝试自己做决定的能力。<br/><br/>■ 爸爸妈妈要理解自己的孩子<br/>既不要过多地干涉宝宝做什么，也不要催促他做什么。尽可能地多说些有趣的事情来引逗他去按你的意思去做。家长固然是要制定些严格的、持之以恒的规矩，但是要仔细考虑这些规矩的内容和适用范围。如果发现自己对孩子说“不行”的时候大大地多于“行”，就可能是你制定的规矩太多了。另外，如果家长一味地妥协，孩子就会被宠坏。所以，关键是如何在这两者之间找到均衡。<br/><br/>■ 巧妙地给宝宝选择的权力<br/>有时你可能会跟他解释，但他仍然不想做你要求他做的事情。这是因为他想要自己做出选择。<br/>“这一阶段如果给孩子提供选择项让他自己做出选择，会有助于锻炼他的决策技巧。“你是想穿你的绿外套呢还是黄外套？”“你是要自己走呢还是要抱着？”只要孩子们选择其一，你的短期目标就达到了。 　　<br/>但你需要确保你提供的选择项是你自己能接收的。如果你是要去某个地方，就别说：“你是想去呢还是在家里呆着？”如果孩子选择在家呆着，而你又必须要去，那你的孩子得到的教训就是他的选择无关紧要，你提出选择时并没打算说话算数。<br/>还有，威胁也不是一个选择。“穿上外套，否则我就揍你/把你自己留在家里/再也不带你出门了。”这可不是选择，而是威胁。威胁只会导致你的孩子害怕你。并且还会给父母设下一个陷阱：如果你的孩子还是拒绝穿外衣，你就只好把你的威胁变成现实，这样，只能使情况更加糟糕。<br/>
]]>
</description>
</item><item>
<link>http://www.kakapo.cn/blog/read.php?165</link>
<title><![CDATA[php网站生产环境之安全配置推荐]]></title> 
<author>kakapo &lt;kakapowu@gmail.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Wed, 21 Jul 2010 03:14:13 +0000</pubDate> 
<guid>http://www.kakapo.cn/blog/read.php?165</guid> 
<description>
<![CDATA[ 
	主要从安全Security，性能Performance，代码整洁度Code cleanliness角度考虑<br/><br/>- register_globals = Off&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Security, Performance]<br/>- register_long_arrays = Off&nbsp;&nbsp;&nbsp;&nbsp; [Performance]<br/>- display_errors = Off&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Security]<br/>- log_errors = On&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Security]<br/>- output_buffering = 4096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Performance]<br/>- register_argc_argv = Off&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Performance]<br/>- magic_quotes_gpc = Off&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Performance]<br/>- variables_order = "GPCS"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Performance]<br/>- error_reporting = E_ALL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Code Cleanliness, Security(?)]<br/>- allow_call_time_pass_reference = Off&nbsp;&nbsp;&nbsp;&nbsp; [Code cleanliness]<br/><br/><br/>安全模式必须要开启<br/>safe_mode = on<br/>safe_mode_gid = off<br/><br/>启动safe_mode，会对许多PHP函数进行限制，特别是和系统相关的文件打开、命令执行等函数<br/><br/>safe_mode_include_dir = [WEBSITE]<br/><br/>运行文件目录<br/>safe_mode_exec_dir = <br/>safe_mode_allowed_env_vars = PHP_<br/><br/>open_basedir = [WEBSITE]<br/><br/>必须要禁用的函数<br/><br/>disable_functions=exec,passthru,popen,proc_open,shell_exec,system,phpinfo, assert<br/><br/>建议禁用的函数disable_functions=chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,<br/>file,file_get_contents,fputs,fwrite,chgrp,chmod,chown<br/><br/>expose_php = Off<br/><br/>关闭错误信息提示<br/>display_errors = Off<br/><br/>关闭全局变量<br/>register_globals = Off<br/><br/>不允许调用dl<br/>enable_dl = Off<br/><br/>关闭远程文件<br/><br/>allow_url_fopen = Off<br/>allow_url_include = Off<br/><br/>http only 开启<br/>session.cookie_httponly = 1<br/><br/>https secure 开启<br/>session.cookie_secure = 1<br/><br/>明确定义upload_tmp_dir设置为系统tmp目录<br/><br/>Tags - <a href="http://www.kakapo.cn/blog/tag.php?tag=php" rel="tag">php</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=%25E5%25AE%2589%25E5%2585%25A8" rel="tag">安全</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=safe_mode" rel="tag">safe_mode</a>
]]>
</description>
</item><item>
<link>http://www.kakapo.cn/blog/read.php?164</link>
<title><![CDATA[php的assert()是否安全？]]></title> 
<author>kakapo &lt;kakapowu@gmail.com&gt;</author>
<category><![CDATA[网海拾贝]]></category>
<pubDate>Tue, 20 Jul 2010 06:45:57 +0000</pubDate> 
<guid>http://www.kakapo.cn/blog/read.php?164</guid> 
<description>
<![CDATA[ 
	assert这个函数在php语言中是用来判断一个表达式是否成立。返回true or false;<br/>例如<br/><div class="code"><br/>&lt;?php<br/>$s = 123;<br/>assert(&quot;is_int($s)&quot;);<br/>?&gt;<br/></div><br/><br/>从这个例子可以看到字符串参数会被执行，这跟eval()类似。不过eval($code_str)只是执行符合php编码规范的$code_str。assert的<br/>用法却更详细一点。assert_option()可以用来对assert()的进行一些约束和控制;<br/><br/>默认值<br/>ASSERT_ACTIVE=1 //Assert函数的开关 <br/>ASSERT_WARNING =1 //当表达式为false时，是否要输出警告性的错误提示,issue a PHP warning for each failed assertion <br/>ASSERT_BAIL= 0 //是否要中止运行；terminate execution on failed assertions <br/>ASSERT_QUIET_EVAL= 0 //是否关闭错误提示，在执行表达式时；disable error_reporting during assertion expression evaluation&nbsp;&nbsp;<br/>ASSERT_CALLBACK= (NULL) // 是否启动回调函数 user function to call on failed assertions<br/><br/>如果按照默认值来，在程序的运行过程中调用assert()来进行判断表达式，遇到false时程序也是会继续执行的，这在生产环境中这样使用是不好的，而在开发调试环境中，却是一种debug的不错的方式。特别是用上callback的方法，可以知道具体的出错信息。例如<br/><div class="code"><br/><br/>&lt;?php<br/>// Active assert and make it quiet<br/>assert_options(ASSERT_ACTIVE, 1);<br/>assert_options(ASSERT_WARNING, 0);<br/>assert_options(ASSERT_QUIET_EVAL, 1);<br/><br/>// Create a handler function<br/>function my_assert_handler($file, $line, $code)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;&lt;hr&gt;Assertion Failed:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File &#039;$file&#039;&lt;br /&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Line &#039;$line&#039;&lt;br /&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Code &#039;$code&#039;&lt;br /&gt;&lt;hr /&gt;&quot;;<br/>&#125;<br/><br/>// Set up the callback<br/>assert_options(ASSERT_CALLBACK, &#039;my_assert_handler&#039;);<br/><br/>// Make an assertion that should fail<br/>assert(&#039;mysql_query(&quot;&quot;)&#039;);<br/>?&gt; <br/><br/></div><br/><br/> 所以，php的官方文档里头是建议将assert用来进行debug，我们可以发现还有一个开关ASSERT_ACTIVE可以用来控制是否开启debug。<br/><br/>现在问题就产生了，如果程序员在开发的时候在代码中留下了很多assert()，然后在程序发布的时候关闭执行，设置assert_options(ASSERT_ACTIVE,0);这样做是否可行？有没有安全问题？<br/><br/>我的建议是，既然assert主要作用是debug，就不要在程序发布的时候还留着它。在程序中用assert来对表达进行判断是不明智的，原因上文说了，一个是在生产环境中assert可能被disabled，所以assert不能被完全信任；二是assert()可以被继续执行；而如果在生产环境让ASSERT_ACTIVE=1，那这个表达式字符串可以被执行本身就存在安全隐患。例如<br/><br/><div class="code"><br/>&lt;?php<br/>function fo()&#123;<br/>&nbsp;&nbsp;$fp = fopen(&quot;c:/test.php&quot;,&#039;w&#039;);<br/>&nbsp;&nbsp;fwrite($fp,&quot;123&quot;);<br/>&nbsp;&nbsp;fclose($fp);<br/>&nbsp;&nbsp;return true;<br/>&#125;<br/>assert(&quot;fo()&quot;);<br/>?&gt;<br/></div><br/><br/><br/><br/><br/> <br/><br/><br/>Tags - <a href="http://www.kakapo.cn/blog/tag.php?tag=assert" rel="tag">assert</a>
]]>
</description>
</item><item>
<link>http://www.kakapo.cn/blog/read.php?163</link>
<title><![CDATA[checkbox multi 多选获取length]]></title> 
<author>kakapo &lt;kakapowu@gmail.com&gt;</author>
<category><![CDATA[XHTML/CSS]]></category>
<pubDate>Thu, 15 Jul 2010 06:39:25 +0000</pubDate> 
<guid>http://www.kakapo.cn/blog/read.php?163</guid> 
<description>
<![CDATA[ 
	兼容浏览器的作法：<br/><br/><div class="code"><br/>&lt;form name=&quot;seachfrm&quot; method=&quot;post&quot;&gt;<br/>&lt;ul&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;li &gt;&lt;input type=&quot;checkbox&quot; checked=&quot;&quot; value=&quot;150&quot; name=&quot;selstores&#91;&#93;&quot; &gt; 世茂滨江店&lt;/li&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;&lt;input type=&quot;checkbox&quot; checked=&quot;&quot; value=&quot;151&quot; name=&quot;selstores&#91;&#93;&quot; &gt;众鑫店&lt;/li&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ul&gt;<br/>&lt;/form&gt;<br/></div><br/><br/><div class="code"><br/>var len = document.forms&#91;&#039;seachfrm&#039;&#93;.elements&#91;&#039;selstores&#91;&#93;&#039;&#93;.length;<br/>&nbsp;&nbsp;var c=0;<br/>&nbsp;&nbsp;for(var i=0;i&lt;len;i++)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(document.forms&#91;&#039;seachfrm&#039;&#93;.elements&#91;&#039;selstores&#91;&#93;&#039;&#93;&#91;i&#93;.checked)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&#125;<br/></div><br/><br/><div class="code"><br/>&lt;?php<br/>//输出array();<br/>print_r($_POST&#91;&#039;selstores&#039;&#93;);<br/>?&gt;<br/></div><br/>Tags - <a href="http://www.kakapo.cn/blog/tag.php?tag=checkbox" rel="tag">checkbox</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=multi" rel="tag">multi</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=length" rel="tag">length</a>
]]>
</description>
</item><item>
<link>http://www.kakapo.cn/blog/read.php?162</link>
<title><![CDATA[ICE for PHP 安装和使用指南]]></title> 
<author>kakapo &lt;kakapowu@gmail.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Thu, 29 Apr 2010 13:46:03 +0000</pubDate> 
<guid>http://www.kakapo.cn/blog/read.php?162</guid> 
<description>
<![CDATA[ 
	介绍<br/>ICE 的官网是http://www.zeroc.com。ICE（Internet Communications Engine 网络通讯引擎），是由Corba原核心成员开发的一个开源中间件，据称其各种性能完全优于Corba。<br/><br/><br/>1、下载地址<br/>http://www.zeroc.com/download/Ice/3.2/Ice-3.2.0.tar.gz<br/>http://www.zeroc.com/download/Ice/3.2/IcePHP-3.2.0.tar.gz<br/><br/>2、安装<br/>2.1 安装Ice for C++ 3.2.0<br/>&nbsp;&nbsp;&nbsp;&nbsp;$tar xzvf Ice-3.2.0.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;$cd Ice-3.2.0<br/>&nbsp;&nbsp;&nbsp;&nbsp;编辑文件config/Make.rules，修改一些参数（可以不修改，按默认值安装）<br/>&nbsp;&nbsp;&nbsp;&nbsp;$make && make install<br/>&nbsp;&nbsp;&nbsp;&nbsp;一般这一步不会出问题的，但是编译时间较长，<br/>&nbsp;&nbsp;&nbsp;&nbsp;如果出问题，一般是缺少一些库，参照出错信息安装相应的库。<br/>&nbsp;&nbsp; 默认安装地址在 /opt/Ice-3.2.0<br/><br/>2.2 安装IcePHP<br/>&nbsp;&nbsp;&nbsp;&nbsp;$tar xzvf IcePHP-3.2.0.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;$cd IcePHP-3.2.0<br/>&nbsp;&nbsp;&nbsp;&nbsp;$vi config/Make.rules&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改 PHP_HOME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?= /usr/local/php&nbsp;&nbsp;#php的安装目录，如果已经编译安装过了PHP的话。<br/>&nbsp;&nbsp;&nbsp;&nbsp;$export ICE_HOME=/opt/Ice-3.2.0 ＃这一步很重要，否则后面编译会出错，报没有找到IceUtil::stringToInt64()方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;$make && make install<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp; 编译过程我还遇到如下错误<br/>&nbsp;&nbsp;<div class="code"><br/>Marshal.cpp:1932: error: &#039;ZVAL_ADDREF&#039; was not declared in this scope<br/>&nbsp;&nbsp; </div><br/>&nbsp;&nbsp; 通过Google，ICE的论坛有技术支持，解决办法是在 Marshal.cpp将ZVAL_ADDREF 改成 Z_ADDREF_P。这种错误我不知道笔误还是故意，希望在以后的版本会修复这个bug。<br/><br/>&nbsp;&nbsp; 安装完成后，会在/opt/下出现IcePHP-3.2.0目录，lib/IcePHP.so就是下面要用到的。<br/><br/>2.3 配置php.ini<br/>&nbsp;&nbsp; vi /etc/php.ini<br/><br/>在任意位置增加两行：<br/>extension_dir = /opt/IcePHP-3.2.0/lib/<br/>extension=IcePHP.so<br/>ice.profiles = /etc/ice.prop<br/><br/>#也可以将IcePHP.so拷贝到原来的php的extension_dir目录<br/><br/>2.4.准备/etc/ice.prop<br/>vi /etc/ice.prop<br/><br/>加入以下两行：<br/><br/>[profile_demo]<br/>ice.slice=/usr/local/apache2/htdocs/hello/Hello.ice<br/><br/>这两行的意思就是，增加一个ice的配置，名字是profile_demo，slice文件是…Hello.ice<br/><br/><br/><br/>3.创建一个php client<br/>方法一：<br/>将ice文件编译成php文件<br/>举例，<br/> $ /opt/Ice-3.2.0/bin/slice2php Printer.ice #生成一个Printer.php文件<br/><br/>编写一个client.php例子<br/><div class="code"><br/>&lt;?php?<br/>ini_set(&#039;include_path&#039;,ini_get(&#039;include_path&#039;) . PATH_SEPARATOR . &#039;/opt/Ice-3.2.0/php&#039;);<br/>//Ice.php是<br/>require &#039;Ice.php&#039;;?<br/>require &#039;Printer.php&#039;;?<br/>?<br/>$ic = null;?<br/>try?<br/>&#123;?<br/>$ic = Ice_initialize();?<br/>$base = $ic-&gt;stringToProxy(&quot;SimplePrinter:default -p 10000&quot;);?<br/>$printer = Demo_PrinterPrxHelper::checkedCast($base);?<br/>if(!$printer)?<br/>throw new RuntimeException(&quot;Invalid proxy&quot;);?<br/>?<br/>$printer-&gt;printString(&quot;Hello World!&quot;);?<br/>&#125;?<br/>catch(Exception $ex)?<br/>&#123;?<br/>echo $ex;?<br/>&#125;?<br/>?<br/>if($ic)?<br/>&#123;?<br/>// Clean up?<br/>try?<br/>&#123;?<br/>$ic-&gt;destroy();?<br/>&#125;?<br/>catch(Exception $ex)?<br/>&#123;?<br/>echo $ex;?<br/>&#125;?<br/>&#125;?<br/>?&gt;<br/></div><br/><br/><br/><br/><br/>4、ICE在PHP应用中的缺点，无法使用PHP编写Server端，其实这也是PHP的一个缺陷——没有完善的多进程和多线程管理机制。因此，Server端可以采用ICE所支持的其它语言进行编写，比如JAVA/C++/VB/PYTHON等。<br/><br/><br/><br/><br/>参考：<br/><a href="http://www.54chen.com/php-tech/the-advanced-interconnection-technology-the-use-of-ice-unicom-php-and-java.html" target="_blank"><br/>“先进的互联互通技术”–使用ice联通php和java<br/></a><br/><a href="http://zhengdl126.javaeye.com/blog/481243" target="_blank">ICE-高效的中间件平台</a><br/><a href="http://www.webgameexpress.com/blog/?p=88" target="_blank">ICE的PHP扩展(翻译) 之一 概述和简介</a><br/><br/><br/><br/>Tags - <a href="http://www.kakapo.cn/blog/tag.php?tag=icephp" rel="tag">icephp</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=ice" rel="tag">ice</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=for" rel="tag">for</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=php" rel="tag">php</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=zval_addref" rel="tag">zval_addref</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=stringtoint64" rel="tag">stringtoint64</a>
]]>
</description>
</item><item>
<link>http://www.kakapo.cn/blog/read.php?161</link>
<title><![CDATA[Linux常用命令行操作]]></title> 
<author>kakapo &lt;kakapowu@gmail.com&gt;</author>
<category><![CDATA[Linux/Apache]]></category>
<pubDate>Tue, 01 Dec 2009 07:02:27 +0000</pubDate> 
<guid>http://www.kakapo.cn/blog/read.php?161</guid> 
<description>
<![CDATA[ 
	1、查找文件<br/>a. 在指定目录下查找匹配的文件<br/>find /path/ -name file* <br/>b. 统计文件数<br/>find /path/ -name file* &#124;wc -l<br/><br/>2.增量备份文件<br/>tar -g snapshot -czvf backup.tar.gz /path/<br/><br/>tar ztf backup.tar.gz 检查压缩包<br/><br/>tar xzvf backup.tar.gz 解压缩<br/><br/>3. 查看文件数<br/>ls -l &#124; wc -l<br/><br/>4.查看文件大小<br/>du -sm /path/* (m 标识 MB)<br/><br/>5.ln的使用<br/>ln -s /source/path /dist/path<br/>说明：ln source dist 是产生一个连结(dist)到 source，至于使用硬连结或软链结则由参数决定。<br/>删除ln 可以用unlink /dist/path<br/><br/><br/>
]]>
</description>
</item><item>
<link>http://www.kakapo.cn/blog/read.php?160</link>
<title><![CDATA[如何在window7下使用zend studio 5]]></title> 
<author>kakapo &lt;kakapowu@gmail.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Thu, 26 Nov 2009 18:43:31 +0000</pubDate> 
<guid>http://www.kakapo.cn/blog/read.php?160</guid> 
<description>
<![CDATA[ 
	zend 公司目前还没有开发兼容 window 7 64 位的 zend studio 5.5版本的软件，我从zend 论坛里头搜到一个帖子，有高人已经能搞定了<a href="http://forums.zend.com/viewtopic.php?f=50&t=997" target="_blank">Zend Studio 5.5 on Windows 7</a>，我自己试用了好久，最终也算搞定了。为了节约时间，我将中文的理解记下：<br/><br/>1. 下载并安装最新的 JRE for Windows: http://java.com/en/download/manual.jsp<br/>2. 下载并安装 WinRAR: http://rarlabs.com (be sure to install with Explorer shell extension).<br/>3. 下载 Zend Studio 5.5.1<br/>4. 点右键将ZendStudio-5_5_1.exe 解压缩在当前目录.<br/>5. 进入解压后产生的目录 Windows&#92;resource (主要这不是系统盘的windows/resources).<br/>6. 然后将 "jre" 目录重命名为 "jre backup".<br/>7. 然后复制 C:&#92;Program Files (x86)&#92;Java&#92;jre6 目录到Windows/resource/下 重命名 "jre6" 为 "jre".<br/>8. 回到上级Windows/目录下执行ZendStudio-5_5_1.exe ，安装.<br/>9. 安装完成后，从windows/resource目录下将"jre backup" 目录复制到 Zend Studio 5.5 的安装目录下.<br/>10. 将已安装目录下的 "jre" 重命名为 "jre another backup"<br/>11. 然后将"jre backup" 重命名为 "jre"<br/>12. 最后一步很关键，要设置ZDE.exe的运行兼容性，右键选择ZDE.exe的属性-->兼容性-->以兼容模式运行这个程序，选择 Windows Vista。<br/><br/>胜利！由于我一开始不知道兼容性怎么设置，总是碰到渲染的色彩问题，软件界面显示不正常，浪费了3个多小时的时间。<br/><br/>希望对后人有所帮助。我喜欢Zend Studio 5.5，讨厌后面集成到Eclips。<br/><br/>Tags - <a href="http://www.kakapo.cn/blog/tag.php?tag=window" rel="tag">window</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=7%252Czend" rel="tag">7,zend</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=studio" rel="tag">studio</a> , <a href="http://www.kakapo.cn/blog/tag.php?tag=5.5%252Cjre" rel="tag">5.5,jre</a>
]]>
</description>
</item><item>
<link>http://www.kakapo.cn/blog/read.php?159</link>
<title><![CDATA[PHP SSO 开源软件--Xppass ]]></title> 
<author>kakapo &lt;kakapowu@gmail.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Fri, 30 Oct 2009 10:28:43 +0000</pubDate> 
<guid>http://www.kakapo.cn/blog/read.php?159</guid> 
<description>
<![CDATA[ 
	最近做了一个新的开源项目,PHP 单点登录系统 Xppass，访问地址在http://xppass.googlecode.com<br/><br/>项目特点：<br/><br/>1、提供三种解决方案Cookie方案、Session方案和Ticket方案，根据需求任选其一。<br/><br/>2、可采用哈希分表设计，支持亿万级别用户数据量存储。<br/><br/>3、提供用户名和电子邮箱两种互补注册方式。<br/><br/>4、实现安全登录技术，采用密码MD5加密传输和hmac身份验证。<br/><br/>5、提供自动安装程序。<br/><br/>6、支持多语言版本。<br/><br/><a href="http://xppass.googlecode.com/files/ticket_chart.gif" target="_blank"><img src="http://xppass.googlecode.com/files/ticket_chart.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="400" height="400"/></a><br/><br/>官方网址:<a href="http://xppass.googlecode.com" target="_blank">http://xppass.googlecode.com</a><br/><br/><br/><br/>Tags - <a href="http://www.kakapo.cn/blog/tag.php?tag=php%252Csso%252Cxppass" rel="tag">php,sso,xppass</a>
]]>
</description>
</item>
</channel>
</rss>