<?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://wukangrui.net/feed" rel="self" type="application/rss+xml" />
	<link>http://wukangrui.net</link>
	<description>独立 自由 责任 诚实</description>
	<pubDate>Fri, 26 Dec 2008 18:38:17 +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>另一种流浪感受</title>
		<link>http://wukangrui.net/2008/12/26/another-city-makes-me-feel-lonely.html</link>
		<comments>http://wukangrui.net/2008/12/26/another-city-makes-me-feel-lonely.html#comments</comments>
		<pubDate>Fri, 26 Dec 2008 18:28:35 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
		
		<category><![CDATA[乱七八糟]]></category>

		<category><![CDATA[感受]]></category>

		<category><![CDATA[日记]]></category>

		<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=407</guid>
		<description><![CDATA[　　在厦门的第一个不寒冷冬天，容易让我想起十二月的北京——那个不属于我的城市。
　　北京和厦门，从云南出发的距离相差不大，一南一北。厦门的气候和云南更接近，但是这个城市在很多地方却给我和北京相似的感觉。
　　我记得北京第一次给我异乡浪子情怀是在大二时候的一个国庆节。同学朋友中，家在北京的或者不是太远的都各自回去了。我们宿舍只剩下我和广西的蓝英两个人。蓝英整个国庆节就在网吧基本上没回来过。而我，感冒得非常厉害，一个人窝在宿舍里。除了到食堂解决一下温饱问题，甚少出门。
　　在宿舍里咳得眼冒金星天昏地暗，却无人问津。我只有不多的几个朋友，平时绝对不会觉得孤单觉得无助。但是在那几天里，真的希望有人一起吃饭，一起玩玩游戏或者买张DVD回宿舍看。
　　有一天晚上，班上的一个北京女孩打电话给我，只是问候一下。我的坚强却在那一刻完全崩溃。就在她在电话另一端轻声安慰我，叮嘱我去看医生的时候，我心里在自言自语：我背着行囊，越过几万里路程，学习和生活的这个都市，它不是我的城市，它不属于我，我也不属于它。直到多年以后我离开北京很久，那里会唤起我的怀念的，只有一帮朋友而已。而他们，现在也已各奔东西了。
　　来到厦门的时候，我已经不再是象牙塔里的那个青涩少年了。也不可以找个借口逃课躲在宿舍里疗伤。不管遇到什么样的事情，你不会想对别人讲，只能闷在心里然后按掉闹钟去面对一天的工作。
　　这个比北京小了太多的城市，把人隔离得更远。生活的圈子被挤压到只有几个关系不错的同事。永远有空愿意陪伴我的，就只是已经年华逝去，容颜苍老的SAMSUNG P40了。
　　两个不属于我的城市，一个总是试图将我包容和同化，我却总是感觉和它的格格不入；另一个我总是试图将自己变成它的一部分，却始终离它很远很远。
　　流浪的人，生活会教会你坚强。但是自己，要学会承受孤独，要学会欣赏有距离的美好和幸福，要学会默默地在一旁找到自己的快乐和宁静。
]]></description>
			<content:encoded><![CDATA[<p>　　在厦门的第一个不寒冷冬天，容易让我想起十二月的北京——那个不属于我的城市。</p>
<p>　　北京和厦门，从云南出发的距离相差不大，一南一北。厦门的气候和云南更接近，但是这个城市在很多地方却给我和北京相似的感觉。<span id="more-407"></span></p>
<p>　　我记得北京第一次给我异乡浪子情怀是在大二时候的一个国庆节。同学朋友中，家在北京的或者不是太远的都各自回去了。我们宿舍只剩下我和广西的蓝英两个人。蓝英整个国庆节就在网吧基本上没回来过。而我，感冒得非常厉害，一个人窝在宿舍里。除了到食堂解决一下温饱问题，甚少出门。</p>
<p>　　在宿舍里咳得眼冒金星天昏地暗，却无人问津。我只有不多的几个朋友，平时绝对不会觉得孤单觉得无助。但是在那几天里，真的希望有人一起吃饭，一起玩玩游戏或者买张DVD回宿舍看。</p>
<p>　　有一天晚上，班上的一个北京女孩打电话给我，只是问候一下。我的坚强却在那一刻完全崩溃。就在她在电话另一端轻声安慰我，叮嘱我去看医生的时候，我心里在自言自语：我背着行囊，越过几万里路程，学习和生活的这个都市，它不是我的城市，它不属于我，我也不属于它。直到多年以后我离开北京很久，那里会唤起我的怀念的，只有一帮朋友而已。而他们，现在也已各奔东西了。</p>
<p>　　来到厦门的时候，我已经不再是象牙塔里的那个青涩少年了。也不可以找个借口逃课躲在宿舍里疗伤。不管遇到什么样的事情，你不会想对别人讲，只能闷在心里然后按掉闹钟去面对一天的工作。</p>
<p>　　这个比北京小了太多的城市，把人隔离得更远。生活的圈子被挤压到只有几个关系不错的同事。永远有空愿意陪伴我的，就只是已经年华逝去，容颜苍老的SAMSUNG P40了。</p>
<p>　　两个不属于我的城市，一个总是试图将我包容和同化，我却总是感觉和它的格格不入；另一个我总是试图将自己变成它的一部分，却始终离它很远很远。</p>
<p>　　流浪的人，生活会教会你坚强。但是自己，要学会承受孤独，要学会欣赏有距离的美好和幸福，要学会默默地在一旁找到自己的快乐和宁静。</p>
]]></content:encoded>
			<wfw:commentRss>http://wukangrui.net/2008/12/26/another-city-makes-me-feel-lonely.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>做房奴不必太着急</title>
		<link>http://wukangrui.net/2008/12/23/dont-be-hurried-to-buy-house.html</link>
		<comments>http://wukangrui.net/2008/12/23/dont-be-hurried-to-buy-house.html#comments</comments>
		<pubDate>Tue, 23 Dec 2008 15:35:55 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
		
		<category><![CDATA[指手划脚]]></category>

		<category><![CDATA[自荐精华]]></category>

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

		<category><![CDATA[经济]]></category>

		<category><![CDATA[评论]]></category>

		<category><![CDATA[购房]]></category>

		<guid isPermaLink="false">http://wukangrui.net/2008/12/23/%e5%81%9a%e6%88%bf%e5%a5%b4%e4%b8%8d%e5%bf%85%e5%a4%aa%e7%9d%80%e6%80%a5.html</guid>
		<description><![CDATA[ 　　现在的房价，是一天比一天低。很多人看到近乎折半的房价，忍不住了，不敢相信会有这么好的机会，不论手里有钱没钱，都已经蠢蠢欲动了。
　　由此其实可以看出来，中国的老百姓心里的“购房情结”有多重了。我记得还在好几年前，大约是我刚毕业的时候，有看过一篇《80后莫要急于做房奴》的文章，里面分析了中国人的购房情结，分析了“买房不如租房，买车不如租车”的理念（作者是以北京作为分析目标）。那篇文章令我触动很深。
　　“买房不如租房”，是从中国的虚高房价和一些实际情况得出来的。当时中国的房价，是工薪阶层十年供不完一套房。这比成熟市场的比例高出太多。由此作者认定中国的房价是不合理的。另外，中国绝大部分地区的发展都缺乏长远规划。商品房号称是产权（使用权）七十年。而实际上很多时候我们的城建规划不能持续七十年，绝大部分情况下三十年左右就可能出现重新规划、拆迁的情况。也就是你买套房实际上只能拥有30年左右，然后就得面临拆迁，补偿，购房的问题。在这种情况下，房价如果不涨，则购买的房子没有升值空间，又不能作为永久财产；房价如果上涨，补偿的拆迁费还不够届时买房的费用。而供一套房的钱和利息，基本上够支付30-40年的房租了。另外我们80后的一代人，绝大部分人的工作并不是稳定干一辈子的。很多时候我们会选择跳槽、换行业、换地区……那么，租房避开了买房的约束性……等等。
　　两三年过去了，到了今天，房价狂跌，很多地区的房价都已经腰斩。是不是现在很适合购房了呢？关于这个问题，就见仁见智了。如果本来就要买房，即使不降价也计划要买的人来说，这时候房价跌了这么多，贷款利率又大幅下降，这时候买房自然是没有问题。
　　但是如果是因为房价跌了，觉得这时候机会最好而急于买房。我觉得大可不必。从最近的行情、政策、舆论综合来看，绝大部分人并不认为当前房价已经处于低位。而是认为房价依然偏高。在金融风暴才刚刚转化成金融海啸，全球经济不景气的这个阶段，房价想要企稳反弹，恐怕是不太容易。
　　我们国家出台政策要修建更多的经济适用房和廉租房、保障房，如果是采用新建的方式，将会大幅度冲击商品房市场。如果是采用收购现有房源供应的情况，那老百姓同样可以更低价格购买到商品房。除了这两种情况，国家当然也有可能把投资直接以补贴、减免税款等各种形式补到购房者手中。不论是以那种方式，都只能有一个结果，就是目前买房并不划算。
　　厦门这个地方，土地有限，岛外还可以扩建，岛内弹丸之地，寸土寸金。所以一直都有一种观点认为厦门的房价绝不会跌。事实如何呢？岛内房价的确相对坚挺。但是之前那种所有楼盘房价都飚高的情形绝对是不正常的。到了现在，优质的楼盘房价虽然还是较高，但也都有较大幅度的下降。而相对中低档一点的楼盘更是跌得厉害。可见土地再贵，房价要跌谁也挡不住。
　　现在又有观点认为，厦门的房价跌到这个水平，已经没有下跌空间了。我个人倒是不太认同这种观点。之前导报上有报道，福建省计划对住房公积金、社保的缴付比例进行调整，减少个人支付的比例。但是这个消息暂时还没有下文，我却从电视新闻里看到了更值得期待的消息，那就是为了应对金融危机，政府对今年采用调整薪酬等方式应对难关，而不进行裁员的企业可以允许缓缴社保等鼓励措施。中央也不断出台新的“应对越来越严重的金融危机”的新政策。
　　一切迹象都充分说明：金融海啸才刚刚开始，困难的日子才刚刚开始。
　　面对不可预知的失业风险、降薪风险；面对可以预见的持续降息、减税、优惠和补贴。就算要做房奴，还是等等好。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://wukangrui.net/attachments/2008/12/3067749.jpg"><img style="border-right: 0px; border-top: 0px; display: inline; margin: 0px 5px 2px 0px; border-left: 0px; border-bottom: 0px" title="3067749" src="http://wukangrui.net/attachments/2008/12/3067749-thumb.jpg" border="0" alt="3067749" width="244" height="122" align="left" /></a> 　　现在的房价，是一天比一天低。很多人看到近乎折半的房价，忍不住了，不敢相信会有这么好的机会，不论手里有钱没钱，都已经蠢蠢欲动了。</p>
<p>　　由此其实可以看出来，中国的老百姓心里的“购房情结”有多重了。我记得还在好几年前，大约是我刚毕业的时候，有看过一篇《80后莫要急于做房奴》的文章，里面分析了中国人的购房情结，分析了“买房不如租房，买车不如租车”的理念（作者是以北京作为分析目标）。那篇文章令我触动很深。<span id="more-401"></span></p>
<p>　　“买房不如租房”，是从中国的虚高房价和一些实际情况得出来的。当时中国的房价，是工薪阶层十年供不完一套房。这比成熟市场的比例高出太多。由此作者认定中国的房价是不合理的。另外，中国绝大部分地区的发展都缺乏长远规划。商品房号称是产权（使用权）七十年。而实际上很多时候我们的城建规划不能持续七十年，绝大部分情况下三十年左右就可能出现重新规划、拆迁的情况。也就是你买套房实际上只能拥有30年左右，然后就得面临拆迁，补偿，购房的问题。在这种情况下，房价如果不涨，则购买的房子没有升值空间，又不能作为永久财产；房价如果上涨，补偿的拆迁费还不够届时买房的费用。而供一套房的钱和利息，基本上够支付30-40年的房租了。另外我们80后的一代人，绝大部分人的工作并不是稳定干一辈子的。很多时候我们会选择跳槽、换行业、换地区……那么，租房避开了买房的约束性……等等。</p>
<p>　　两三年过去了，到了今天，房价狂跌，很多地区的房价都已经腰斩。是不是现在很适合购房了呢？关于这个问题，就见仁见智了。如果本来就要买房，即使不降价也计划要买的人来说，这时候房价跌了这么多，贷款利率又大幅下降，这时候买房自然是没有问题。</p>
<p>　　但是如果是因为房价跌了，觉得这时候机会最好而急于买房。我觉得大可不必。从最近的行情、政策、舆论综合来看，绝大部分人并不认为当前房价已经处于低位。而是认为房价依然偏高。在金融风暴才刚刚转化成金融海啸，全球经济不景气的这个阶段，房价想要企稳反弹，恐怕是不太容易。</p>
<p>　　我们国家出台政策要修建更多的经济适用房和廉租房、保障房，如果是采用新建的方式，将会大幅度冲击商品房市场。如果是采用收购现有房源供应的情况，那老百姓同样可以更低价格购买到商品房。除了这两种情况，国家当然也有可能把投资直接以补贴、减免税款等各种形式补到购房者手中。不论是以那种方式，都只能有一个结果，就是目前买房并不划算。</p>
<p>　　厦门这个地方，土地有限，岛外还可以扩建，岛内弹丸之地，寸土寸金。所以一直都有一种观点认为厦门的房价绝不会跌。事实如何呢？岛内房价的确相对坚挺。但是之前那种所有楼盘房价都飚高的情形绝对是不正常的。到了现在，优质的楼盘房价虽然还是较高，但也都有较大幅度的下降。而相对中低档一点的楼盘更是跌得厉害。可见土地再贵，房价要跌谁也挡不住。</p>
<p>　　现在又有观点认为，厦门的房价跌到这个水平，已经没有下跌空间了。我个人倒是不太认同这种观点。之前导报上有报道，福建省计划对住房公积金、社保的缴付比例进行调整，减少个人支付的比例。但是这个消息暂时还没有下文，我却从电视新闻里看到了更值得期待的消息，那就是为了应对金融危机，政府对今年采用调整薪酬等方式应对难关，而不进行裁员的企业可以允许缓缴社保等鼓励措施。中央也不断出台新的“应对越来越严重的金融危机”的新政策。</p>
<p>　　一切迹象都充分说明：金融海啸才刚刚开始，困难的日子才刚刚开始。</p>
<p>　　面对不可预知的失业风险、降薪风险；面对可以预见的持续降息、减税、优惠和补贴。就算要做房奴，还是等等好。</p>
]]></content:encoded>
			<wfw:commentRss>http://wukangrui.net/2008/12/23/dont-be-hurried-to-buy-house.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>冯小宁的理想化带来什么</title>
		<link>http://wukangrui.net/2008/11/04/comment-to-movie-super-typhoon.html</link>
		<comments>http://wukangrui.net/2008/11/04/comment-to-movie-super-typhoon.html#comments</comments>
		<pubDate>Tue, 04 Nov 2008 17:52:36 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
		
		<category><![CDATA[指手划脚]]></category>

		<category><![CDATA[自荐精华]]></category>

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

		<category><![CDATA[灾难]]></category>

		<category><![CDATA[电影]]></category>

		<category><![CDATA[评论]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=294</guid>
		<description><![CDATA[　　《超强台风》里不死一人，甚至不死一狗的做法，让观众的这种潜意识期待落空的同时，给这部本来很难得很优秀的国产“灾难片”打上了深深的“不真实”的烙印。我们假设当年的“桑美”台风在浙江登陆15分钟确实没有造成人员伤亡，即使是如此，作为一部灾难电影而不是纪录片，仍然应该从艺术的真实角度去表现。]]></description>
			<content:encoded><![CDATA[<p><!--5d9980f9-->　　号称第一部真正意义上的国产灾难片的《超强台风》，是素来擅长电脑特效的冯小宁导演在电脑特效上的杰出作品。相比之前《无极》用3亿打造的所谓“震撼”场面面前，总投资5000万以下的《超强台风》轻松取胜。然而，很多朋友看来《超强台风》之后，都说感觉和国外灾难片比差距太大了。这是为什么呢？其实，从最近网上流传的一个对《超强台风》中的电脑特技进行分解的视频看，《超强台风》中的电脑特技确实达到了国外灾难大片的水平——场面恢弘震撼，同时又自然真实。尤其是台风刚刚登陆，汽车乱飞的场面、龙卷风形成，渔船被卷起的场面以及之后的台风眼内壮观唯美的画面，都充分展示了冯小宁导演及其率领的电脑技术团队的实力。然而，我们在欣赏这部电影的时候，很少感觉到像《后天》、《天地大冲撞》时候的那种“扣人心弦”。简单来说，就是电影的悬念不足、对观众内心的震撼不足。<span id="more-294"></span></p>
<p style="text-align: center;"><a href="http://wukangrui.net/attachments/2008/11/supertyphoon.jpg" target="_blank"><img class="aligncenter size-thumbnail wp-image-336" title="《超强台风》剧照" src="http://wukangrui.net/attachments/2008/11/supertyphoon-320x200.jpg" alt="" /></a></p>
<p>　　《超强台风》就像《泰坦尼克号》一样，取材于真实历史事件。然而《泰坦尼克号》更像是把爱情片拍成了灾难片，而《超强台风》则像是把灾难片拍成了政治片。我们可以理解这是一部主旋律电影，要不然也不会被广电总局列为重点影片。可是作为一部灾难片，“超强台风”登陆这么大面积的经济相对发达的地区如此长的时间，却无一人遇难，甚至连龙卷风卷起来的小狗到最后都存活下来。市长离开相对安全的抗灾指挥部，和一两个助手一起为劝说几个渔民而被困暴风骤雨海啸中……这样的情节，能令人信服和激起观众的共鸣吗？很明显是不可能的。</p>
<p>　　《超强台风》从开始没多久，就进入一个模式，导演拼命营造出给党政领导的“两难”境地，拼命营造出台风来临前的紧张气氛。事实上在台风刚登陆，甫见壮观的特效场面的时候，我们确实也为之紧张和震撼了。但随着灾情的展开，剧情的高潮还没到来，观众心中的“高潮”已经过去了。因为我们已经知道在这部“灾难片”中，不会有什么“灾难性”的后果。几百个亿的经济损失数字，没办法通过荧屏给观众直观的感受，在灾难面前，我们不怕经济的损失——只要人还在，钱总是能挣回来的。所以，作为灾难片，观影的观众需要的是被电影激发起心底的人道主义温情和人性的共鸣。而不是对财产损失的叹息。</p>
<p>　　《超强台风》里不死一人，甚至不死一狗的做法，让观众的这种潜意识期待落空的同时，给这部本来很难得很优秀的国产“灾难片”打上了深深的“不真实”的烙印。我们假设当年的“桑美”台风在浙江登陆15分钟确实没有造成人员伤亡，即使是如此，作为一部灾难电影而不是纪录片，仍然应该从艺术的真实角度去表现。你要强调“台风”的“超强”，又不舍得进行真正观众心目中的“毁灭”，那是不可能营造灾难效果的。鲁迅早就说过，悲剧就是把美好的东西毁灭给人看。而《超强台风》里则是营造了一个让大部分观众觉得不真实的“完美市长”形象，加上让观众从常识出发难以接受的没有任何生命损失的16级台风。</p>
<p>　　正是因为缺乏了这样的真实感和对人性的震撼，使这部优秀影片的电脑特效给观众留下的印象，也大打折扣了。就像恐怖片一样，如果观众看了之后没有感觉到恐惧和紧张，那么不用多久你就会被遗忘。而《超强台风》的效果则是，经过了在影院第一次观看时对特效场面的惊叹和赞美过后，走出影院再提起这部电影，更多人第一反应就是——小狗被那么强大的龙卷风刮飞最后怎么居然还能存活？那个记者被连栓牢的汽车都卷走的大浪卷走之后怎么居然不带伤地而且那么巧地被冲到其它人身边？？台风能刮起大卡车，刮起渔船，却刮不起跑过去救人的市长等人？？？……</p>
<p>　　建议《超强台风》还是不要叫“第一部国产灾难片”了。改成要求各级机关事业单位组织观看的重点主旋律片吧。5000万元投资加上国际水准的电脑特效，肯定能让这部浙江地区抗击台风的记实影片成为主旋律片中的一个里程碑！</p>
]]></content:encoded>
			<wfw:commentRss>http://wukangrui.net/2008/11/04/comment-to-movie-super-typhoon.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Oblog检测搜索引擎的一个问题</title>
		<link>http://wukangrui.net/2008/09/19/bug-about-search-engine-of-oblog.html</link>
		<comments>http://wukangrui.net/2008/09/19/bug-about-search-engine-of-oblog.html#comments</comments>
		<pubDate>Fri, 19 Sep 2008 03:10:26 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
		
		<category><![CDATA[所谓技术]]></category>

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

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

		<category><![CDATA[博客]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=293</guid>
		<description><![CDATA[Oblog采用简称判断搜索引擎。当访问者的计算机名中包含了和某个搜索引起相同的简称就会被当成搜索引擎处理。]]></description>
			<content:encoded><![CDATA[<p>　　今天上班的时候，有一个用户反映博客登陆不了了。</p>
<p>　　因为最近做了整合方面的改动，我第一反应是难道这方面有问题？可是自己测试什么问题都不存在。后来用户抓图来看，是登陆表单的位置一片空白。</p>
<p>　　于是远程协助帮她处理。一般情况下，有人正常有人不正常都会是缓存的问题或者浏览器设置的问题。所以我首先做的也就是这两件事。可是处理之后问题依旧。在用户电脑上打开网页源代码，发现登陆表单是个JS脚本。代码输出正常的。该JS路径在我的电脑上访问就一切正常，而在用户的电脑上则访问不到。测试的时候进一步发现，用户的电脑上似乎只能访问我们博客系统的html静态文件，所以<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">asp</a>文件都返回404错误。<span id="more-293"></span></p>
<p>　　这种问题以前确实没有遇到。只遇到过静态文件可以访问动态脚本不能访问的，那都是IIS的问题，服务器端的问题。于是要从代码下手了。</p>
<p>　　打开login.<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">asp</a>（登陆脚本就是由它输出的），源代码头部首先就看到ChkSpider这个函数。我知道这是检测搜索引擎的，如果发现客户端是搜索引擎，直接截断输出。难道是这个有问题？，首先把这行代码注释了，刷新页面，登陆窗口正常显示了。</p>
<p>　　后来用户又在访问User_Index.<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">asp</a>的时候遇到同样的问题，看来改具体文件不是办法了，打开Class_Sys.<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">asp</a>文件，找到ChkSpider这个函数，进入函数后直接让它Exit Function。再测，问题全都没了。</p>
<p>　　这个问题一般情况下很难遇到，但是实际上几率并不算特别小，只要用户计算机名称包含了google、sohu、sina、soso、baidu、yahoo等字符串（不用严格等同于Spider的名称，只要包含相关字符串），就会被当作是Spider来处理。</p>
<p>　　看来Oblog的这个检测逻辑需要改进一下了。要么，对常用Spider的名称做精确匹配，要么，就换一种方式来检测吧。这个本身并没有问题的代码，跟千奇百怪的计算机名称撞车的可能性还是很大的。</p>
]]></content:encoded>
			<wfw:commentRss>http://wukangrui.net/2008/09/19/bug-about-search-engine-of-oblog.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>26岁的时候挺好的</title>
		<link>http://wukangrui.net/2008/08/31/good-feeling-at-26.html</link>
		<comments>http://wukangrui.net/2008/08/31/good-feeling-at-26.html#comments</comments>
		<pubDate>Sun, 31 Aug 2008 20:07:53 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
		
		<category><![CDATA[乱七八糟]]></category>

		<category><![CDATA[情绪]]></category>

		<category><![CDATA[感受]]></category>

		<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=292</guid>
		<description><![CDATA[　　26岁的时候，我在一个我最喜欢的类型的城市——不要太大，大到随便出去办一件事也要花去我几个小时；不要太落后，落后到什么东西出来都要过上三五个月才能在商场里见到，而且品种还不全；不要脏乱，像是个城乡结合部一样地给我一种很不舒服的感觉……虽然厦门的消费比较高，但是我的确喜欢上了这个海上花园城市。
　　26岁的时候，我没有处于经济危机之中。虽然没有实现时间自由、财务自由，但是我吃喝不愁，基本可以按自己的意愿来安排自己的生活，不用喝娃哈哈纯净水代替我喜欢的咖啡，不用三天两头打10086检查话费是否处于停机边缘。
　　26岁的时候，我重新买了一把吉他给自己做生日礼物，尽管我再也没有以前那么多的时间去练习；
　　26岁的时候，我的房间里没有盒装的、散装的、桶状的泡面，以后也不会再有，尽管我的电脑里还存着国伟拍下的我在凌晨2点坐在电脑前面吃泡面的视频。
　　26岁的时候，我不担心女朋友正在千里之外和别的男人约会，不担心明天被老板炒了鱿鱼。
　　这样看来，26岁的时候，我挺好的。
]]></description>
			<content:encoded><![CDATA[<p>　　26岁的时候，我在一个我最喜欢的类型的城市——不要太大，大到随便出去办一件事也要花去我几个小时；不要太落后，落后到什么东西出来都要过上三五个月才能在商场里见到，而且品种还不全；不要脏乱，像是个城乡结合部一样地给我一种很不舒服的感觉……虽然厦门的消费比较高，但是我的确喜欢上了这个海上花园城市。</p>
<p>　　26岁的时候，我没有处于经济危机之中。虽然没有实现时间自由、财务自由，但是我吃喝不愁，基本可以按自己的意愿来安排自己的生活，不用喝娃哈哈纯净水代替我喜欢的咖啡，不用三天两头打10086检查话费是否处于停机边缘。<span id="more-292"></span></p>
<p>　　26岁的时候，我重新买了一把吉他给自己做生日礼物，尽管我再也没有以前那么多的时间去练习；</p>
<p>　　26岁的时候，我的房间里没有盒装的、散装的、桶状的泡面，以后也不会再有，尽管我的电脑里还存着国伟拍下的我在凌晨2点坐在电脑前面吃泡面的视频。</p>
<p>　　26岁的时候，我不担心女朋友正在千里之外和别的男人约会，不担心明天被老板炒了鱿鱼。</p>
<p>　　这样看来，26岁的时候，我挺好的。</p>
]]></content:encoded>
			<wfw:commentRss>http://wukangrui.net/2008/08/31/good-feeling-at-26.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>感谢让我学会享受痛苦的人</title>
		<link>http://wukangrui.net/2008/08/26/thanks-to-those-make-me-painful.html</link>
		<comments>http://wukangrui.net/2008/08/26/thanks-to-those-make-me-painful.html#comments</comments>
		<pubDate>Tue, 26 Aug 2008 14:42:45 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
		
		<category><![CDATA[点滴珍藏]]></category>

		<category><![CDATA[回忆]]></category>

		<category><![CDATA[情绪]]></category>

		<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=291</guid>
		<description><![CDATA[　　转眼又是九月了，我平静了近两年，突然一下子心情低落到一个前所未有的低谷。
　　我现在真的越来越欣赏孤独、无助的感觉和流浪的味道了。一个人关上门在出租屋里用和我一样伤痕累累的三星P40播放着90年代的老歌，颓废和孤独的感觉瞬间弥漫充满小小的房间。
　　随便从耳边飘过的歌词中抓一句来，都是伤感。
　　我记得很早以前在《读者》上读过一篇文章，说人生总是痛苦多于快乐，孤独多于幸福；因为人的本性是需要孤独，需要痛苦的。
　　现在我相信了，因为快乐总是容易被淡忘，几乎是转身就忘记了。稍微多一点就被人漠视了。可是痛苦会发酵，会让人把自己包裹在其中慢慢享受。
　　我现在变成了一个非常懂得欣赏和享受孤独和痛苦的人，我甚至擅长制造让自己沉浸其中的颓废。在又一个九月即将到来的时候，我要感谢所有让我学会享受痛苦的人，感谢所有曾经让我咬牙切齿的男男女女。谢谢你们对我造成的改变，让我如此懂得生活。
　　祝福你们也和我一样，能够自由自在地享受痛苦的快感，或者，祝福你们中不喜欢痛苦的人，过得开心快乐，幸福甜蜜。
桃之夭夭，灼灼其华。
之子于归，宜其室家。
桃之夭夭，有蕡其实。
之子于归，宜其家室。
桃之夭夭，其叶蓁蓁。
之子于归，宜其家人。
]]></description>
			<content:encoded><![CDATA[<p>　　转眼又是九月了，我平静了近两年，突然一下子心情低落到一个前所未有的低谷。</p>
<p>　　我现在真的越来越欣赏孤独、无助的感觉和流浪的味道了。一个人关上门在出租屋里用和我一样伤痕累累的三星P40播放着90年代的老歌，颓废和孤独的感觉瞬间弥漫充满小小的房间。<span id="more-291"></span></p>
<p>　　随便从耳边飘过的歌词中抓一句来，都是伤感。</p>
<p>　　我记得很早以前在《读者》上读过一篇文章，说人生总是痛苦多于快乐，孤独多于幸福；因为人的本性是需要孤独，需要痛苦的。</p>
<p>　　现在我相信了，因为快乐总是容易被淡忘，几乎是转身就忘记了。稍微多一点就被人漠视了。可是痛苦会发酵，会让人把自己包裹在其中慢慢享受。</p>
<p>　　我现在变成了一个非常懂得欣赏和享受孤独和痛苦的人，我甚至擅长制造让自己沉浸其中的颓废。在又一个九月即将到来的时候，我要感谢所有让我学会享受痛苦的人，感谢所有曾经让我咬牙切齿的男男女女。谢谢你们对我造成的改变，让我如此懂得生活。</p>
<p>　　祝福你们也和我一样，能够自由自在地享受痛苦的快感，或者，祝福你们中不喜欢痛苦的人，过得开心快乐，幸福甜蜜。</p>
<div>桃之夭夭，灼灼其华。</div>
<p>之子于归，宜其室家。</p>
<p>桃之夭夭，有蕡其实。</p>
<p>之子于归，宜其家室。</p>
<p>桃之夭夭，其叶蓁蓁。</p>
<p>之子于归，宜其家人。</p>
]]></content:encoded>
			<wfw:commentRss>http://wukangrui.net/2008/08/26/thanks-to-those-make-me-painful.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>“鸟巢”开幕式：瑕不掩瑜，可谓成功！</title>
		<link>http://wukangrui.net/2008/08/09/2008-beijing-olympic-opening.html</link>
		<comments>http://wukangrui.net/2008/08/09/2008-beijing-olympic-opening.html#comments</comments>
		<pubDate>Sat, 09 Aug 2008 13:27:37 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
		
		<category><![CDATA[指手划脚]]></category>

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

		<category><![CDATA[奥运]]></category>

		<category><![CDATA[开幕式]]></category>

		<category><![CDATA[评论]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=290</guid>
		<description><![CDATA[　　外媒的评价很高。
　　老外即使看不懂中国文化，但是他们能看到让他们惊讶和感叹的科技元素和大气磅礴，来自中国北京奥运的“好莱坞大片“，足以让他们发自内心地赞赏。
　　中国人呢？更看重的是怎么在这样一个百年梦圆的难得机会上向世界展示中国。就这一问题，应该说前半段表现很不错，从内容选取到表现手段，很中国，虽然是用的高科技手段，但是整个表现形式确是非常中国化的，水墨、书法、汉字、古乐都是地地道道的中国制造。
　　遗憾的只是，张艺谋一心想摆脱自己，但是实际上还是没能摆脱。在开幕式上，更突出传统和历史，而对现代中国的新面貌确实缺乏表现。我们不能一辈子让外国人心目中只有一个”水墨画的”、“唐装的”、“瓷器和旗袍的”、“手工磨坊“的中国。
　　不过话分两头，这其实也的确不能怪张艺谋，近现代中国，光顾“学习西方先进文化”了，自己的东西，丢掉的很多，创造的太少（甚至没有）。开幕式上穿插了一点点航天的元素，这的确是新中国值得骄傲的东西，可以说创意团队其实真的很努力，很考虑国人的心态了。
　　如果在这种情况下还要吹毛求疵否定开幕式整体的优秀和成功，那太不公平了！
　　细节存在问题，有一些地方确实是不好，但是不等于整场开幕式都不好，应该说开幕式总体上充分体现了科技奥运、绿色奥运、人文奥运的主题，充分表现了中国元素同时又兼顾了国际接轨，是非常成功的作品！
　　只有那些没看就在考虑怎么批评的人，他们看到人多就批判“人海战术”，看到特效就批判“全靠技术手段”，看到孔子孟子就批判“老外看不懂”，看到四大发明水墨画就批判“没创意&#8221;、看到华丽的场面级就批评”奢华、浪费“，看到不够豪华就批判“农民意识，寒酸”。这些人是永远不会客观评价任何东西的。
　　还有很多”非主流“的”新新人类“对特效觉得腻味，对开幕式觉得乏味，这些传统文化极度匮乏的”非主流“一族，也只配听听周杰伦，玩玩劲舞团了。
]]></description>
			<content:encoded><![CDATA[<p>　　外媒的评价很高。</p>
<p>　　老外即使看不懂中国文化，但是他们能看到让他们惊讶和感叹的科技元素和大气磅礴，来自中国北京奥运的“好莱坞大片“，足以让他们发自内心地赞赏。</p>
<p>　　中国人呢？更看重的是怎么在这样一个百年梦圆的难得机会上向世界展示中国。就这一问题，应该说前半段表现很不错，从内容选取到表现手段，很中国，虽然是用的高科技手段，但是整个表现形式确是非常中国化的，水墨、书法、汉字、古乐都是地地道道的中国制造。<span id="more-290"></span></p>
<p>　　遗憾的只是，张艺谋一心想摆脱自己，但是实际上还是没能摆脱。在开幕式上，更突出传统和历史，而对现代中国的新面貌确实缺乏表现。我们不能一辈子让外国人心目中只有一个”水墨画的”、“唐装的”、“瓷器和旗袍的”、“手工磨坊“的中国。</p>
<p>　　不过话分两头，这其实也的确不能怪张艺谋，近现代中国，光顾“学习西方先进文化”了，自己的东西，丢掉的很多，创造的太少（甚至没有）。开幕式上穿插了一点点航天的元素，这的确是新中国值得骄傲的东西，可以说创意团队其实真的很努力，很考虑国人的心态了。</p>
<p>　　如果在这种情况下还要吹毛求疵否定开幕式整体的优秀和成功，那太不公平了！</p>
<p>　　细节存在问题，有一些地方确实是不好，但是不等于整场开幕式都不好，应该说开幕式总体上充分体现了科技奥运、绿色奥运、人文奥运的主题，充分表现了中国元素同时又兼顾了国际接轨，是非常成功的作品！</p>
<p>　　只有那些没看就在考虑怎么批评的人，他们看到人多就批判“人海战术”，看到特效就批判“全靠技术手段”，看到孔子孟子就批判“老外看不懂”，看到四大发明水墨画就批判“没创意&#8221;、看到华丽的场面级就批评”奢华、浪费“，看到不够豪华就批判“农民意识，寒酸”。这些人是永远不会客观评价任何东西的。</p>
<p>　　还有很多”非主流“的”新新人类“对特效觉得腻味，对开幕式觉得乏味，这些传统文化极度匮乏的”非主流“一族，也只配听听周杰伦，玩玩劲舞团了。</p>
]]></content:encoded>
			<wfw:commentRss>http://wukangrui.net/2008/08/09/2008-beijing-olympic-opening.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>动易SiteFactory目录权限详解</title>
		<link>http://wukangrui.net/2008/06/26/directory-permissions-detail-of-powereasy.html</link>
		<comments>http://wukangrui.net/2008/06/26/directory-permissions-detail-of-powereasy.html#comments</comments>
		<pubDate>Thu, 26 Jun 2008 19:50:00 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
		
		<category><![CDATA[所谓技术]]></category>

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

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

		<category><![CDATA[动易]]></category>

		<category><![CDATA[权限]]></category>

		<category><![CDATA[网站安全]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=288</guid>
		<description><![CDATA[　　官方说明中，指出在2003版本上的目录权限是给Network Service帐户分配写入权限。这是一个理想化的状态，如果要满足分配该帐户写入权限即可正常使用的话，那么要满足以下条件：

你的站点是采用了默认的帐号设置，即站点程序池的运行标识帐户是Network Service(网络服务）；
你给根目录分配了写入权限，而不是按照安装向导页所提示的那几个目录设置；
你从来没有修改过NTFS的默认权限设置，对所有目录和文件都会有“Creator Owner”这个帐户的特殊权限。

　　满足以上条件的话，你给动易所在的目录分配了Network Service的写入权限后，基本上能够正常安装和使用动易（还会遇到一些问题，但是基本上可以了）。
　　下面解释一下：由于程序池运行标识帐户是“网络服务”，因此你的动易站点在读写磁盘文件、创建目录、创建文件的时候都是以Network Service帐户身份运行的，于是乎，创建和写入权限就不是问题了，再加上Creator Owner帐户的特殊权限（完全控制），也就对站点自己创建的文件和目录拥有了完全控制权限，因此可以正常运行。可能遇到的问题：由于只拥有写入权限（写入权限只包括创建目录和文件、写入属性、写入扩展属性），在修改站点配置，或者是在后台修改广告目录、JS目录、上传目录的时候，需要对已有的目录，而且创建者、所有者一般是Administrators组或者是Administrator，于是出现“对IAA目录的访问被拒绝”这一类的权限不足的提示。
　　现在考虑第二种情况，站长拥有一定的服务器安全配置知识，或者是虚拟主机、合租主机，WEB站点有下列任意一种情况：

没有用网络帐户来运行程序池而是用IWAM_机器名用户；
没有用Windows的任意一个默认帐户，而是自己创建了一个用户来运行程序池，比如我自己创建了IWAM_OOPHOME来运行程序池，IUSR_OOPHOME来运行IIS。
在创建站点之后，删除了站点根目录的Creator Owner权限，只保留了Administrators和System的完全控制权限和IWAM_机器名和IUSR_机器名的读写权限。

　　有上述任意一种情况，将导致安装不能成功，站点也不能正常运行。
]]></description>
			<content:encoded><![CDATA[<p>　　官方说明中，指出在2003版本上的目录权限是给Network Service帐户分配写入权限。这是一个理想化的状态，如果要满足分配该帐户写入权限即可正常使用的话，那么要满足以下条件：</p>
<ol>
<li>你的站点是采用了默认的帐号设置，即站点程序池的运行标识帐户是Network Service(网络服务）；</li>
<li>你给根目录分配了写入权限，而不是按照安装向导页所提示的那几个目录设置；</li>
<li>你从来没有修改过NTFS的默认权限设置，对所有目录和文件都会有“Creator Owner”这个帐户的特殊权限。</li>
</ol>
<p>　　满足以上条件的话，你给动易所在的目录分配了Network Service的写入权限后，基本上能够正常安装和使用动易（还会遇到一些问题，但是基本上可以了）。<span id="more-288"></span></p>
<p>　　下面解释一下：由于程序池运行标识帐户是“网络服务”，因此你的动易站点在读写磁盘文件、创建目录、创建文件的时候都是以Network Service帐户身份运行的，于是乎，创建和写入权限就不是问题了，再加上Creator Owner帐户的特殊权限（完全控制），也就对站点自己创建的文件和目录拥有了完全控制权限，因此可以正常运行。可能遇到的问题：由于只拥有写入权限（写入权限只包括创建目录和文件、写入属性、写入扩展属性），在修改站点配置，或者是在后台修改广告目录、JS目录、上传目录的时候，需要对已有的目录，而且创建者、所有者一般是Administrators组或者是Administrator，于是出现“对IAA目录的访问被拒绝”这一类的权限不足的提示。</p>
<p>　　现在考虑第二种情况，站长拥有一定的服务器安全配置知识，或者是虚拟主机、合租主机，WEB站点有下列任意一种情况：</p>
<ol>
<li>没有用网络帐户来运行程序池而是用IWAM_机器名用户；</li>
<li>没有用Windows的任意一个默认帐户，而是自己创建了一个用户来运行程序池，比如我自己创建了IWAM_OOPHOME来运行程序池，IUSR_OOPHOME来运行IIS。</li>
<li>在创建站点之后，删除了站点根目录的Creator Owner权限，只保留了Administrators和System的完全控制权限和IWAM_机器名和IUSR_机器名的读写权限。</li>
</ol>
<p>　　有上述任意一种情况，将导致安装不能成功，站点也不能正常运行。</p>
]]></content:encoded>
			<wfw:commentRss>http://wukangrui.net/2008/06/26/directory-permissions-detail-of-powereasy.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>微软官方FastCGI，PHP成为IIS“一等公民”</title>
		<link>http://wukangrui.net/2008/06/23/fastcgi-for-php-in-iis.html</link>
		<comments>http://wukangrui.net/2008/06/23/fastcgi-for-php-in-iis.html#comments</comments>
		<pubDate>Mon, 23 Jun 2008 19:46:00 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
		
		<category><![CDATA[乱七八糟]]></category>

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

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

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

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

		<guid isPermaLink="false">http://wukangrui.net/?p=283</guid>
		<description><![CDATA[
The IIS Team is eager to announce the official release of Microsoft FastCGI Extension for IIS 6.0 as a free download. For the first time, we are providing hosters and PHP developers full support for a stack of technology that enables reliable, scalable PHP hosting on production Internet Information Services 6.0 (IIS 6) Web servers. [...]]]></description>
			<content:encoded><![CDATA[<p><!---5d9980f9--></p>
<blockquote><p>The IIS Team is eager to announce the official release of Microsoft FastCGI Extension for IIS 6.<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a> as a <a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;g=6&amp;i=1521">free download</a>. For the first time, we are providing hosters and <a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a> developers full support for a stack of technology that enables reliable, scalable <a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a> hosting on production Internet Information Services 6.<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a> (IIS 6) Web servers. (Note: The FastCGI module is built in to Windows Server 2008.)</p></blockquote>
<p>　　以往在Windows 上配置服务器的<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>环境，虽然有无数的经验，无数的文章，但是仍然不能解决所有需求。因此“LAMP”集成安装包才会如此盛行。然而除了<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>，我们有时候也并不愿意放弃<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">ASP</a>和<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">ASP</a>.NET，毕竟Linux不论有多少好处，还有那么多游戏不能在上面运行，那么多软件不能在上面运行。为了工作效率和娱乐，更多的人愿意在虚拟机或者单独的分区里装个Linux来做学习之用。<span id="more-283"></span></p>
<p>　　很多人在Windows上配置了Apache，<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>，MySQL，然后到处打听如何让<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">ASP</a>或者<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">ASP</a>.NET得以运行。或者让Apache和IIS可以并行。</p>
<p>　　这一切都源于<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>（不光<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>，还有Perl，JSP等等各种CGI）在IIS上的地位低下，运行效率低，功能不全，不稳定……</p>
<p>　　其实反过来<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">ASP</a>和<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">ASP</a>.NET在Apache上的情况是更糟的，至少我们可以让主流的所有<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>应用都在WIMP（Windows + IIS + MySQL + <a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>）上跑得很好，但是几乎不能让任何主流的<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">ASP</a>或者<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">ASP</a>.NET在Apache上正常运行。</p>
<p>　　但是微软很早就开始与<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>开发人员的合作努力必然是会开花结果的。2007年的时候微软IIS小组开始发布FastCGI，如今正式版已经可以支持IIS6.<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a>、IIS7.<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a>，甚至内置在Windows Server 2008上。主机商和试用者的反应都不错。IIS有微软官方团队在努力，<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>有Zend在推动，强强联合带来的信心更是异常强大。</p>
<p>　　FastCGI允许以FastCGI模式在IIS上运行<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>，而不是采用以往的ISAPI方式，这样更接近于Linux下的运行状况。即使在Linux下，也会选择用FastCGI模式来为<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>提速。</p>
<p>　　从<a href="http://www.iis.net/php">www.iis.net/php</a>下载最新的FastCGI扩展安装包，安装到Windows上，然后下载一个<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>的ZIP包解压到任意目录，照着IIS.NET上的配置说明对<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">php</a>.ini做简单修改，再对FastCGIExt.ini做一下配置。为IIS站点加上<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">php</a>扩展名关联。一切都和以前的配置方式差不多。但是不需要再修改环境变量啊，重启服务器啊，拷贝某个文件到Windows目录之类的了，回收一下应用池，一切OK了。</p>
<p>　　在没装Zend Optimizer的情况下打开<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>站点测试一下，不用做基准测试，不用探针来测试，凭感觉都能很明显的感觉到速度的提升。然后装上Zend Optimizer，试试吧，的确稳定了很多，快速了很多。</p>
<p>　　微软的FastCGI并不只是针对<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>的扩展，实际上在FastCGI配置文件里，你可以通过</p>
<div class="codeText">
<div class="codeHead">C++代码</div>
<ol class="dp-cpp">
<li class="alt"><span><span>TYPE]   </span></span></li>
<li><span><a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">php</a>=<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>   </span></li>
<li class="alt"><span>cgi=PERL   </span></li>
<li><span>  </span></li>
<li class="alt"><span>[<a href="http://wukangrui.net/tags/php" class="st_tag internal_tag" rel="tag nofollow" title="标签 PHP 下的日志">PHP</a>]   </span></li>
<li><span>&#8230;&#8230;   </span></li>
<li class="alt"><span>  </span></li>
<li><span>[PERL]   </span></li>
<li class="alt"><span>&#8230;&#8230;..   </span></li>
</ol>
</div>
<p>　　这样的形式继续添加自己的扩展，全都以FastCGI方式运行。</p>
<p>　　FastCGI扩展的免费下载地址：<a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;g=6&amp;i=1521">free download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wukangrui.net/2008/06/23/fastcgi-for-php-in-iis.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>动易SW中的一个严重但不影响使用的bug（二）</title>
		<link>http://wukangrui.net/2008/06/22/api-bug-in-powereasy-siteweaver-part2.html</link>
		<comments>http://wukangrui.net/2008/06/22/api-bug-in-powereasy-siteweaver-part2.html#comments</comments>
		<pubDate>Sun, 22 Jun 2008 18:24:00 +0000</pubDate>
		<dc:creator>小李刀刀</dc:creator>
		
		<category><![CDATA[所谓技术]]></category>

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

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

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

		<category><![CDATA[开发]]></category>

		<guid isPermaLink="false">http://wukangrui.net/?p=282</guid>
		<description><![CDATA[　　上次分析出来了Bug的问题所在，是因为selectSingleNode(strNodeName)不能取到要取的元素，但是为什么这么大的Bug没有出现500错误呢？否则的话，这么大的一个bug不要说是来到用户手上，在开发人员手里就已经被发现了。
　　这次继续分析这个Bug。在新版本的API_Function.asp这个文件中，selectSingleNode这个函数一共用到了5次，有两次是在SendPost函数里，在很早的版本里那两个地方就用的是selectSingleNode，因为那里传递的参数用的是“//status”和“//message”，是正确的XPath，因此不用考虑那里了。此外的三处，代码如下：

ASP/Visual Basic代码

&#8216;**************************************************   
&#8216;函数名：getNodeText   
&#8216;作  用：获取XML文件中指定节点的文本   
&#8216;参  数：strNodeName   &#8212;-节点名称   
&#8216;返回值：解析出来的文本值，   
&#8216;**************************************************   
Function getNodeText(strNodeName)   
    If IsNull(strNodeName) Or IsEmpty(strNodeName) Or strNodeName = &#8220;&#8221; Then Exit Function  
    If IsNode(strNodeName) Then  
        getNodeText = sMyXmlDoc.documentElement.selectSingleNode(strNodeName).Text   
    Else  
        getNodeText = &#8220;&#8221;  
    End If  
End Function  
  
&#8216;**************************************************   
&#8216;函数名：setNodeText   
&#8216;作  用：设置XML文件中指定节点的文本   
&#8216;参  数：strNodeName   &#8212;-节点名称   
&#8216;　　　　strNodeText   &#8212;-要设置的文本   
&#8216;返回值：0 = 设置成功; 否则返回Err.Description   
&#8216;**************************************************   
Function setNodeText(strNodeName, strNodeText)   
    If IsNull(strNodeText) Or IsEmpty(strNodeText) Or strNodeText = &#8220;&#8221; Then Exit Function  
    If IsNull(strNodeName) Or IsEmpty(strNodeName) Or strNodeName = &#8220;&#8221; Then Exit Function  
    If IsNode(strNodeName) Then sMyXmlDoc.documentElement.selectSingleNode(strNodeName).Text = strNodeText   
End Function  
  
&#8216;**************************************************   
&#8216;函数名：IsNode   
&#8216;作  用：检查一个Node是否存在且文本不为空   
&#8216;参  数：strNodeName   &#8212;-节点名称   
&#8216;返回值：True or False   
&#8216;**************************************************   
Function IsNode(strNodeName)   
    IsNode = False  
    If strNodeName = &#8220;&#8221; Then Exit Function  
    If sMyXmlDoc.documentElement.selectSingleNode(strNodeName) Is Nothing Then  
        IsNode = False  
    Else  
        IsNode = True  
    End If  
End Function  


　　我们来看，为什么设置message的值不会成功并且不报错呢？原因就在于setNodeText这个函数的最后一句：

ASP/Visual Basic代码

If IsNode(strNodeName) Then sMyXmlDoc.documentElement.selectSingleNode(strNodeName).Text = strNodeText  


　　IsNode这个函数，从函数的注释（还好这个没改）可以看出，作用是“检测一个元素是否存在且文本不为空”，这个函数本来的作用是用于检查传递的数据包中的“自定义元素”和“扩展元素”的，因为各个接口对标准的支持程度不同，因此在获取数据的时候，有的元素可能只是穿了空值过来，那我们就没有必要对该元素进行处理了，所以要用IsNode来检查一下。但是在setNodeText这个函数里没有调用过IsNode检查。就算调用了，按照以前的方式，一定会取到“message”元素的默认值，从而返回True。
　　在新版本中，由于采用了selectSingleNode来取“message”已经取不到了，自然，IsNode这个函数在检查到message的时候，必然返回空值，因为 sMyXmlDoc.documentElement.selectSingleNode Is Nothing这个判断为真了，所以会返回False。于是，sMyXmlDoc.documentElement.selectSingleNode(&#8221;message&#8221;).Text 这个语句就不会执行，也就不会引发500错误了。
　　做个假设，如果在修改了取元素的方式之后，没有给setNodeText和getNodeText加上IsNode判断，则必然引发500错误。或者，没有修改过IsNode这个函数，则仍然会返回True，然后引发500错误。正好是加上了判断，于是所有对message元素的值的读写都被忽略了，默认值“操作已成功”就这样被原封不动地回发给所有请求，而响应包中的用户数据元素也一样。
　　下面是纠正bug的代码：

ASP/Visual Basic代码

&#8216;**************************************************   
&#8216;函数名：getNodeText   
&#8216;作  用：获取XML文件中指定节点的文本   
&#8216;参  数：strNodeName   &#8212;-节点名称   
&#8216;返回值：解析出来的文本值，   
&#8216;**************************************************   
Function getNodeText(strNodeName)   
    If IsNull(strNodeName) Or IsEmpty(strNodeName) Or strNodeName = &#8220;&#8221; Then Exit Function  
    If IsNode(strNodeName) Then  
        getNodeText = sMyXmlDoc.documentElement.getElementsByTagName(strNodeName).Item(0).Text   
    Else  
        getNodeText = &#8220;&#8221;  
    End If  
End Function  
  
&#8216;**************************************************   
&#8216;函数名：setNodeText   
&#8216;作  用：设置XML文件中指定节点的文本   
&#8216;参  数：strNodeName   &#8212;-节点名称   
&#8216;　　　　strNodeText   &#8212;-要设置的文本   
&#8216;返回值：0 = 设置成功; 否则返回Err.Description   
&#8216;**************************************************   
Function setNodeText(strNodeName, strNodeText)   
    If IsNull(strNodeText) Or IsEmpty(strNodeText) Or strNodeText = &#8220;&#8221; Then Exit Function  
    If IsNull(strNodeName) Or IsEmpty(strNodeName) Or strNodeName = &#8220;&#8221; Then Exit Function  
    If IsNode(strNodeName) Then sMyXmlDoc.documentElement.getElementsByTagName(strNodeName).Item(0).Text = strNodeText   
End Function  
  
&#8216;**************************************************   
&#8216;函数名：IsNode   
&#8216;作  用：检查一个Node是否存在且文本不为空   
&#8216;参  数：strNodeName   &#8212;-节点名称   
&#8216;返回值：True or False   
&#8216;**************************************************   
Function IsNode(strNodeName)   
    IsNode = False  
    If strNodeName = &#8220;&#8221; Then Exit Function  
    If sMyXmlDoc.documentElement.getElementsByTagName(strNodeName).Item(0) Is Nothing Or [...]]]></description>
			<content:encoded><![CDATA[<p>　　<a href="http://blog.oophome.net/?id=279" target="_blank">上次</a>分析出来了Bug的问题所在，是因为selectSingleNode(strNodeName)不能取到要取的元素，但是为什么这么大的Bug没有出现500错误呢？否则的话，这么大的一个bug不要说是来到用户手上，在开发人员手里就已经被发现了。</p>
<p>　　这次继续分析这个Bug。在新版本的API_Function.<a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">asp</a>这个文件中，selectSingleNode这个函数一共用到了5次，有两次是在SendPost函数里，在很早的版本里那两个地方就用的是selectSingleNode，因为那里传递的参数用的是“//status”和“//message”，是正确的XPath，因此不用考虑那里了。此外的三处，代码如下：<span id="more-282"></span></p>
<div class="codeText">
<div class="codeHead"><a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">ASP</a>/Visual Basic代码</div>
<ol class="dp-vb">
<li class="alt"><span><span class="comment">&#8216;************************************************** </span><span>  </span></span></li>
<li><span class="comment">&#8216;函数名：getNodeText </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;作  用：获取XML文件中指定节点的文本 </span><span>  </span></li>
<li><span class="comment">&#8216;参  数：strNodeName   &#8212;-节点名称 </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;返回值：解析出来的文本值， </span><span>  </span></li>
<li><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li class="alt"><span class="keyword">Function</span><span> getNodeText(strNodeName)   </span></li>
<li><span>    </span><span class="keyword">If</span><span> IsNull(strNodeName) </span><span class="keyword">Or</span><span> IsEmpty(strNodeName) </span><span class="keyword">Or</span><span> strNodeName = </span><span class="string">&#8220;&#8221;</span><span> </span><span class="keyword">Then</span><span> </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">If</span><span> IsNode(strNodeName) </span><span class="keyword">Then</span><span>  </span></li>
<li><span>        getNodeText = sMyXmlDoc.documentElement.<span style="background-color: #ffff00">selectSingleNode</span>(strNodeName).Text   </span></li>
<li class="alt"><span>    </span><span class="keyword">Else</span><span>  </span></li>
<li><span>        getNodeText = </span><span class="string">&#8220;&#8221;</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">End</span><span> </span><span class="keyword">If</span><span>  </span></li>
<li><span class="keyword">End</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li class="alt"><span>  </span></li>
<li><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;函数名：setNodeText </span><span>  </span></li>
<li><span class="comment">&#8216;作  用：设置XML文件中指定节点的文本 </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;参  数：strNodeName   &#8212;-节点名称 </span><span>  </span></li>
<li><span class="comment">&#8216;　　　　strNodeText   &#8212;-要设置的文本 </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;返回值：<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a> = 设置成功; 否则返回Err.Description </span><span>  </span></li>
<li><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li class="alt"><span class="keyword">Function</span><span> setNodeText(strNodeName, strNodeText)   </span></li>
<li><span>    </span><span class="keyword">If</span><span> IsNull(strNodeText) </span><span class="keyword">Or</span><span> IsEmpty(strNodeText) </span><span class="keyword">Or</span><span> strNodeText = </span><span class="string">&#8220;&#8221;</span><span> </span><span class="keyword">Then</span><span> </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">If</span><span> IsNull(strNodeName) </span><span class="keyword">Or</span><span> IsEmpty(strNodeName) </span><span class="keyword">Or</span><span> strNodeName = </span><span class="string">&#8220;&#8221;</span><span> </span><span class="keyword">Then</span><span> </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li><span>    </span><span class="keyword">If</span><span> IsNode(strNodeName) </span><span class="keyword">Then</span><span> sMyXmlDoc.documentElement.<span style="background-color: #ffff00">selectSingleNode</span>(strNodeName).Text = strNodeText   </span></li>
<li class="alt"><span class="keyword">End</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li><span>  </span></li>
<li class="alt"><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li><span class="comment">&#8216;函数名：IsNode </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;作  用：检查一个Node是否存在且文本不为空 </span><span>  </span></li>
<li><span class="comment">&#8216;参  数：strNodeName   &#8212;-节点名称 </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;返回值：True or False </span><span>  </span></li>
<li><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li class="alt"><span class="keyword">Function</span><span> IsNode(strNodeName)   </span></li>
<li><span>    IsNode = </span><span class="keyword">False</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">If</span><span> strNodeName = </span><span class="string">&#8220;&#8221;</span><span> </span><span class="keyword">Then</span><span> </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li><span>    </span><span class="keyword">If</span><span> sMyXmlDoc.documentElement.<span style="background-color: #ffff00">selectSingleNode</span>(strNodeName) </span><span class="keyword">Is</span><span> </span><span class="keyword">Nothing</span><span> </span><span class="keyword">Then</span><span>  </span></li>
<li class="alt"><span>        IsNode = </span><span class="keyword">False</span><span>  </span></li>
<li><span>    </span><span class="keyword">Else</span><span>  </span></li>
<li class="alt"><span>        IsNode = </span><span class="keyword">True</span><span>  </span></li>
<li><span>    </span><span class="keyword">End</span><span> </span><span class="keyword">If</span><span>  </span></li>
<li class="alt"><span class="keyword">End</span><span> </span><span class="keyword">Function</span><span>  </span></li>
</ol>
</div>
<p>　　我们来看，为什么设置message的值不会成功并且不报错呢？原因就在于setNodeText这个函数的最后一句：</p>
<div class="codeText">
<div class="codeHead"><a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">ASP</a>/Visual Basic代码</div>
<ol class="dp-vb">
<li class="alt"><span><span class="keyword">If</span><span> IsNode(strNodeName) </span><span class="keyword">Then</span><span> sMyXmlDoc.documentElement.selectSingleNode(strNodeName).Text = strNodeText  </span></span></li>
</ol>
</div>
<p>　　IsNode这个函数，从函数的注释（还好这个没改）可以看出，作用是“检测一个元素是否存在<span style="color: #ff0000;">且文本不为空</span>”，这个函数本来的作用是用于检查传递的数据包中的“自定义元素”和“扩展元素”的，因为各个接口对标准的支持程度不同，因此在获取数据的时候，有的元素可能只是穿了空值过来，那我们就没有必要对该元素进行处理了，所以要用IsNode来检查一下。但是在setNodeText这个函数里没有调用过IsNode检查。就算调用了，按照以前的方式，一定会取到“message”元素的默认值，从而返回True。</p>
<p>　　在新版本中，由于采用了selectSingleNode来取“message”已经取不到了，自然，IsNode这个函数在检查到message的时候，必然返回空值，因为 sMyXmlDoc.documentElement.selectSingleNode Is Nothing这个判断为真了，所以会返回False。于是，sMyXmlDoc.documentElement.selectSingleNode(&#8221;message&#8221;).Text 这个语句就不会执行，也就不会引发500错误了。</p>
<p>　　做个假设，如果在修改了取元素的方式之后，没有给setNodeText和getNodeText加上IsNode判断，则必然引发500错误。或者，没有修改过IsNode这个函数，则仍然会返回True，然后引发500错误。正好是加上了判断，于是所有对message元素的值的读写都被忽略了，默认值“操作已成功”就这样被原封不动地回发给所有请求，而响应包中的用户数据元素也一样。</p>
<p>　　下面是纠正bug的代码：</p>
<div class="codeText">
<div class="codeHead"><a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">ASP</a>/Visual Basic代码</div>
<ol class="dp-vb">
<li class="alt"><span><span class="comment">&#8216;************************************************** </span><span>  </span></span></li>
<li><span class="comment">&#8216;函数名：getNodeText </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;作  用：获取XML文件中指定节点的文本 </span><span>  </span></li>
<li><span class="comment">&#8216;参  数：strNodeName   &#8212;-节点名称 </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;返回值：解析出来的文本值， </span><span>  </span></li>
<li><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li class="alt"><span class="keyword">Function</span><span> getNodeText(strNodeName)   </span></li>
<li><span>    </span><span class="keyword">If</span><span> IsNull(strNodeName) </span><span class="keyword">Or</span><span> IsEmpty(strNodeName) </span><span class="keyword">Or</span><span> strNodeName = </span><span class="string">&#8220;&#8221;</span><span> </span><span class="keyword">Then</span><span> </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">If</span><span> IsNode(strNodeName) </span><span class="keyword">Then</span><span>  </span></li>
<li><span>        getNodeText = sMyXmlDoc.documentElement.<span style="background-color: #ffff00">getElementsByTagName(strNodeName).Item(<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a>)</span>.Text   </span></li>
<li class="alt"><span>    </span><span class="keyword">Else</span><span>  </span></li>
<li><span>        getNodeText = </span><span class="string">&#8220;&#8221;</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">End</span><span> </span><span class="keyword">If</span><span>  </span></li>
<li><span class="keyword">End</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li class="alt"><span>  </span></li>
<li><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;函数名：setNodeText </span><span>  </span></li>
<li><span class="comment">&#8216;作  用：设置XML文件中指定节点的文本 </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;参  数：strNodeName   &#8212;-节点名称 </span><span>  </span></li>
<li><span class="comment">&#8216;　　　　strNodeText   &#8212;-要设置的文本 </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;返回值：<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a> = 设置成功; 否则返回Err.Description </span><span>  </span></li>
<li><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li class="alt"><span class="keyword">Function</span><span> setNodeText(strNodeName, strNodeText)   </span></li>
<li><span>    </span><span class="keyword">If</span><span> IsNull(strNodeText) </span><span class="keyword">Or</span><span> IsEmpty(strNodeText) </span><span class="keyword">Or</span><span> strNodeText = </span><span class="string">&#8220;&#8221;</span><span> </span><span class="keyword">Then</span><span> </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">If</span><span> IsNull(strNodeName) </span><span class="keyword">Or</span><span> IsEmpty(strNodeName) </span><span class="keyword">Or</span><span> strNodeName = </span><span class="string">&#8220;&#8221;</span><span> </span><span class="keyword">Then</span><span> </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li><span>    </span><span class="keyword">If</span><span> IsNode(strNodeName) </span><span class="keyword">Then</span><span> sMyXmlDoc.documentElement.<span style="background-color: #ffff00">getElementsByTagName(strNodeName).Item(<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a>)</span>.Text = strNodeText   </span></li>
<li><span class="keyword">End</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li class="alt"><span>  </span></li>
<li><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;函数名：IsNode </span><span>  </span></li>
<li><span class="comment">&#8216;作  用：检查一个Node是否存在且文本不为空 </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;参  数：strNodeName   &#8212;-节点名称 </span><span>  </span></li>
<li><span class="comment">&#8216;返回值：True or False </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li><span class="keyword">Function</span><span> IsNode(strNodeName)   </span></li>
<li class="alt"><span>    IsNode = </span><span class="keyword">False</span><span>  </span></li>
<li><span>    </span><span class="keyword">If</span><span> strNodeName = </span><span class="string">&#8220;&#8221;</span><span> </span><span class="keyword">Then</span><span> </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">If</span><span> sMyXmlDoc.documentElement.<span style="background-color: #ffff00">getElementsByTagName(strNodeName).Item(<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a>)</span> </span><span class="keyword">Is</span><span> </span><span class="keyword">Nothing</span><span style="background-color: #ffff00"> Or IsEmpty(sMyXmlDoc.documentElement.getElementByTagName(strNodeName).Item(<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a>).Text) </span><span class="keyword">Then</span><span>  </span></li>
<li><span>        IsNode = </span><span class="keyword">False</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">Else</span><span>  </span></li>
<li><span>        IsNode = </span><span class="keyword">True</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">End</span><span> </span><span class="keyword">If</span><span>  </span></li>
<li><span class="keyword">End</span><span> </span><span class="keyword">Function</span><span>  </span></li>
</ol>
</div>
<p>第二种改法：用selectSingleNode的方法，代码如下</p>
<div class="codeText">
<div class="codeHead"><a href="http://wukangrui.net/tags/asp" class="st_tag internal_tag" rel="tag nofollow" title="标签 ASP 下的日志">ASP</a>/Visual Basic代码</div>
<ol class="dp-vb">
<li class="alt"><span><span class="comment">&#8216;************************************************** </span><span>  </span></span></li>
<li><span class="comment">&#8216;函数名：getNodeText </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;作  用：获取XML文件中指定节点的文本 </span><span>  </span></li>
<li><span class="comment">&#8216;参  数：strNodeName   &#8212;-节点名称 </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;返回值：解析出来的文本值， </span><span>  </span></li>
<li><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li class="alt"><span class="keyword">Function</span><span> getNodeText(strNodeName)   </span></li>
<li><span>    </span><span class="keyword">If</span><span> IsNull(strNodeName) </span><span class="keyword">Or</span><span> IsEmpty(strNodeName) </span><span class="keyword">Or</span><span> strNodeName = </span><span class="string">&#8220;&#8221;</span><span> </span><span class="keyword">Then</span><span> </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">If</span><span> IsNode(strNodeName) </span><span class="keyword">Then</span><span>  </span></li>
<li><span>        getNodeText = sMyXmlDoc.documentElement.selectSingleNode(</span><span class="string">&#8220;//&#8221;</span><span>&amp;strNodeName).Text   </span></li>
<li class="alt"><span>    </span><span class="keyword">Else</span><span>  </span></li>
<li><span>        getNodeText = </span><span class="string">&#8220;&#8221;</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">End</span><span> </span><span class="keyword">If</span><span>  </span></li>
<li><span class="keyword">End</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li class="alt"><span>  </span></li>
<li><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;函数名：setNodeText </span><span>  </span></li>
<li><span class="comment">&#8216;作  用：设置XML文件中指定节点的文本 </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;参  数：strNodeName   &#8212;-节点名称 </span><span>  </span></li>
<li><span class="comment">&#8216;　　　　strNodeText   &#8212;-要设置的文本 </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;返回值：<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a> = 设置成功; 否则返回Err.Description </span><span>  </span></li>
<li><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li class="alt"><span class="keyword">Function</span><span> setNodeText(strNodeName, strNodeText)   </span></li>
<li><span>    </span><span class="keyword">If</span><span> IsNull(strNodeText) </span><span class="keyword">Or</span><span> IsEmpty(strNodeText) </span><span class="keyword">Or</span><span> strNodeText = </span><span class="string">&#8220;&#8221;</span><span> </span><span class="keyword">Then</span><span> </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">If</span><span> IsNull(strNodeName) </span><span class="keyword">Or</span><span> IsEmpty(strNodeName) </span><span class="keyword">Or</span><span> strNodeName = </span><span class="string">&#8220;&#8221;</span><span> </span><span class="keyword">Then</span><span> </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li><span>    </span><span class="keyword">If</span><span> IsNode(strNodeName) </span><span class="keyword">Then</span><span> sMyXmlDoc.documentElement.selectSingleNode(</span><span class="string">&#8220;//&#8221;</span><span>&amp;strNodeName).Text = strNodeText   </span></li>
<li class="alt"><span class="keyword">End</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li><span>  </span></li>
<li class="alt"><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li><span class="comment">&#8216;函数名：IsNode </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;作  用：检查一个Node是否存在且文本不为空 </span><span>  </span></li>
<li><span class="comment">&#8216;参  数：strNodeName   &#8212;-节点名称 </span><span>  </span></li>
<li class="alt"><span class="comment">&#8216;返回值：True or False </span><span>  </span></li>
<li><span class="comment">&#8216;************************************************** </span><span>  </span></li>
<li class="alt"><span class="keyword">Function</span><span> IsNode(strNodeName)   </span></li>
<li><span>    IsNode = </span><span class="keyword">False</span><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">If</span><span> strNodeName = </span><span class="string">&#8220;&#8221;</span><span> </span><span class="keyword">Then</span><span> </span><span class="keyword">Exit</span><span> </span><span class="keyword">Function</span><span>  </span></li>
<li><span>    </span><span class="keyword">If</span><span> sMyXmlDoc.documentElement.selectSingleNode(</span><span class="string">&#8220;//&#8221;</span><span>&amp;strNodeName) </span><span class="keyword">Is</span><span> </span><span class="keyword">Nothing</span><span> </span><span class="keyword">Or</span><span> IsEmpty(sMyXmlDoc.documentElement.selectSingleNode(</span><span class="string">&#8220;//&#8221;</span><span>&amp;strNodeName).Text) </span><span class="keyword">Then</span><span>  </span></li>
<li class="alt"><span>        IsNode = </span><span class="keyword">False</span><span>  </span></li>
<li><span>    </span><span class="keyword">Else</span><span>  </span></li>
<li class="alt"><span>        IsNode = </span><span class="keyword">True</span><span>  </span></li>
<li><span>    </span><span class="keyword">End</span><span> </span><span class="keyword">If</span><span>  </span></li>
<li class="alt"><span class="keyword">End</span><span> </span><span class="keyword">Function</span><span>  </span></li>
</ol>
</div>
<p>　　这样就能充分利用selectSingleNode的简洁了，但是还要注意哦，由于新版本的createXmlDom不再是自动生成支持的最高版本的xmldom对象，而是生成默认版本（系统默认版本一般都是3.<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a>以下），而低于4.<a href="http://wukangrui.net/tags/2008" class="st_tag internal_tag" rel="tag nofollow" title="标签 0 下的日志">0</a>的版本中，selectSingleNode对XPath的支持是有问题的，不支持带函数的XPath，所以还要小心！</p>
]]></content:encoded>
			<wfw:commentRss>http://wukangrui.net/2008/06/22/api-bug-in-powereasy-siteweaver-part2.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
