<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Leakon &#187; 原创</title>
	<atom:link href="http://www.leakon.com/archives/category/originality/feed" rel="self" type="application/rss+xml" />
	<link>http://www.leakon.com</link>
	<description>勤奋 - 创新 - 矢志不渝 - 锲而不舍</description>
	<lastBuildDate>Wed, 01 Feb 2012 03:20:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>使用 rsync 备份多台服务器</title>
		<link>http://www.leakon.com/archives/697?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e4%25bd%25bf%25e7%2594%25a8-rsync-%25e5%25a4%2587%25e4%25bb%25bd%25e5%25a4%259a%25e5%258f%25b0%25e6%259c%258d%25e5%258a%25a1%25e5%2599%25a8</link>
		<comments>http://www.leakon.com/archives/697#comments</comments>
		<pubDate>Fri, 27 Jan 2012 15:56:35 +0000</pubDate>
		<dc:creator>leakon</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[rsync]]></category>

		<guid isPermaLink="false">http://www.leakon.com/?p=697</guid>
		<description><![CDATA[今天对服务器备份的脚本进行了重构，把配置参数独立成文件，使用 PHP 代替不熟悉的 shell，理顺了思路，分享一下。
【环境】
一共3台服务器，server-1 和 server-2 是线上生产环境，backup-server 是专门用于备份的服务器。
【目的】
定期把 server-1 和 server-2 的 user 目录下的所有文件同步到 backup-server 的指定目录下。
【前提】
backup-server 上有一个用户 backup，他用 ssh-keygen 生成公钥，传到 server-1 和 server-2，这样 backup 用户登录这 2  [...]]]></description>
			<content:encoded><![CDATA[<p>今天对服务器备份的脚本进行了重构，把配置参数独立成文件，使用 PHP 代替不熟悉的 shell，理顺了思路，分享一下。</p>
<p>【环境】</p>
<p>一共3台服务器，server-1 和 server-2 是线上生产环境，backup-server 是专门用于备份的服务器。</p>
<p>【目的】</p>
<p>定期把 server-1 和 server-2 的 user 目录下的所有文件同步到 backup-server 的指定目录下。</p>
<p>【前提】</p>
<p>backup-server 上有一个用户 backup，他用 ssh-keygen 生成公钥，传到 server-1 和 server-2，这样 backup 用户登录这 2 台线上服务器时不再需要密码。</p>
<p>[backup@backup-server rsync]$ ssh-keygen -t rsa -b 1024</p>
<p>在 ~/.ssh/ 下生成 id_rsa 和 id_rsa.pub，分别是私钥和公钥。</p>
<p>把 id_rsa 重命名成 identity，chmod 600。</p>
<p>把 id_rsa.pub 复制到 server-1 的 /home/user/.ssh/ 目录下，把内容追加到 authorized_keys 文件中，注意此文件也要 chmod 600。</p>
<p>server-2 也如此操作。</p>
<p>之后，backup 用户可以随意 ssh user@server-1 和 ssh user@server-2，不会再问密码。</p>
<p>【功能列表】<br />
* 根据配置文件的 serverName，生成 shell 命令<br />
* 判断是否为唯一 rsync 进程，如果有正在执行的进程，则不执行任何操作<br />
* 确认没有重复进程之后，执行 rsync 命令同步文件，并输出进度信息到 logs 目录<br />
* php 的程序只输出 shell 命令，确认无误后用管道输出给 bash 来运行</p>
<p>【使用方法】<br />
[backup@backup-server rsync]$ /usr/bin/php /home/backup/script/rsync/rsync_web.php server-1 | sh</p>
<p>【详情】</p>
<p>根据 server-1 这个关键字，找到对应的配置信息。</p>
<p>根据一些列规则，生成一串管道命令，输出如下所示：</p>
<p>rsync_process_num=$(ps ax | grep &#8216;rsync&#8217; | grep -v &#8216;grep&#8217; | grep &#8216;server-1&#8242; | grep &#8216;bwlimit&#8217; | wc -l) &amp;&amp; test $rsync_process_num -lt 1 &amp;&amp; /usr/bin/nohup /usr/bin/rsync &#8211;links &#8211;delete &#8211;recursive &#8211;itemize-changes &#8211;progress &#8211;exclude-from=/home/backup/script/rsync/conf/exclude.server-1.conf &#8211;bwlimit=110 user@server-1:/home/user/* /home/backup/server-1/home/user/ &gt;&gt; /home/backup/script/rsync/logs/rsync_web.server-1.log 2&gt;&amp;1 &amp;</p>
<p>对比“功能列表”，可以看明白这一串命令都在干嘛。</p>
<p>【SVN】</p>
<p>具体的代码，我提交到了 googlecode，欢迎指正：http://leakon.googlecode.com/svn/trunk/server/script/rsync/</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leakon.com/archives/697/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>我心底的爱情童话</title>
		<link>http://www.leakon.com/archives/599?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e6%2588%2591%25e5%25bf%2583%25e9%2587%258c%25e7%259a%2584%25e7%2588%25b1%25e6%2583%2585%25e7%25ab%25a5%25e8%25af%259d</link>
		<comments>http://www.leakon.com/archives/599#comments</comments>
		<pubDate>Mon, 04 Jan 2010 16:56:05 +0000</pubDate>
		<dc:creator>leakon</dc:creator>
				<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://www.leakon.com/?p=599</guid>
		<description><![CDATA[我是个在北京长大的八零后，在北京工作这几年，感受到了很多与外地在京工作的朋友不一样的地方。
我不用租房子，不用攒钱买房子。
按理说，稍微努力找个好点的工作，做个月光族挺好。
再找个北京女孩，谈几年恋爱，结婚生子，享受小资生活，真挺好。
有句俗话：老婆孩子热炕头，也许就是对这种生活的简单总结。
我喜欢另一种有点像童话的故事。
2006年大学毕业，小强和小娟，一起从外地来到北京。看着最低 2W  [...]]]></description>
			<content:encoded><![CDATA[<p>我是个在北京长大的八零后，在北京工作这几年，感受到了很多与外地在京工作的朋友不一样的地方。</p>
<p>我不用租房子，不用攒钱买房子。</p>
<p>按理说，稍微努力找个好点的工作，做个月光族挺好。</p>
<p>再找个北京女孩，谈几年恋爱，结婚生子，享受小资生活，真挺好。</p>
<p>有句俗话：老婆孩子热炕头，也许就是对这种生活的简单总结。</p>
<p>我喜欢另一种有点像童话的故事。</p>
<p>2006年大学毕业，小强和小娟，一起从外地来到北京。看着最低 2W 起价的房子，两个人一起低下了头。以他们的收入，只能在南四环外某居民区租下一间10平米的小屋子。用攒了2个月的工资付完租金后，他们一起来到小区门口的成都小吃，每人吃了一碗牛肉面。回到刚租到小家里，小强对小娟说：“相信我，几年以后，我会赚到钱，买一套属于我们自己的房子。到时候，我们就结婚吧，你愿意嫁给我吗？”小娟看着小强那坚定的眼神，幸福地点头答应。</p>
<p>从那以后，是漫长的平淡而艰苦的生活。在这10平米的小屋子里，有掉皮的墙，有破损的小写字台，有窄窄的小双人床；有欢笑，有哭泣；有甜言蜜语，也有争吵不休。</p>
<p>但自始至终，一直陪伴他们的，是那份追逐梦想的信念！</p>
<p>她能看到的，是每天写程序到深夜的坚持不懈的他。</p>
<p>他能看到的，是每天给予关心支持的不离不弃的她。</p>
<p>幸运的是，经过 4 年的艰苦努力，小强的付出，终于有所回报。</p>
<p>两个人靠自己的努力，攒下了郊区一套一居室小户型的首付款，他们终于实现了自己的梦想。</p>
<p>小强实现了 4 年前的诺言，小娟也如约答应了小强的求婚，他们终于开始了自己的幸福。</p>
<p>本来，这是个喜剧式的结尾，到此可以结束了。</p>
<p>我要继续写完这个故事：小强的踏实努力的性格，让他在事业上的发展如日中天。没过几年，他们的经济实力不仅超越了小康小资，更是达到了中产阶级水平。但是，小强并没有像大多数事业有成的人那样，开始勾三搭四，小三儿成群。他一直用心爱护着小娟。</p>
<p>我想，正是她在那最艰苦的几年中的不离不弃，彻底感动了他。他知道今日的所成事业，离不开她那份漫长而坚定的信心和支持。</p>
<p>他们可以一起慢慢变老，一起携手走过一辈子。</p>
<p>故事可以结束了。</p>
<p>像童话么？我想这应该是很多北漂夫妻中比较成功的案例的故事原型吧。</p>
<p>虽然我是北京长大的，但在我心底，一直有一个如此感人的童话爱情梦。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leakon.com/archives/599/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>三枪拍案惊奇 影评</title>
		<link>http://www.leakon.com/archives/579?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e4%25b8%2589%25e6%259e%25aa%25e6%258b%258d%25e6%25a1%2588%25e6%2583%258a%25e5%25a5%2587-%25e5%25bd%25b1%25e8%25af%2584</link>
		<comments>http://www.leakon.com/archives/579#comments</comments>
		<pubDate>Fri, 11 Dec 2009 15:45:06 +0000</pubDate>
		<dc:creator>leakon</dc:creator>
				<category><![CDATA[原创]]></category>
		<category><![CDATA[电影]]></category>

		<guid isPermaLink="false">http://www.leakon.com/?p=579</guid>
		<description><![CDATA[今天跟女友Yoyo一早就赶到东方新天地的新世纪影院（北京多家影院都有中午12点之前的场次票价减半的优惠），我们买了2张半价票，以比较便宜的价格看了下《三枪拍案惊奇》。
前一阵相关的报道很多，《三枪》还在北京电视台做了一个网游的发布晚会，在上映前造足了气势，把大家的胃口吊得很足，看样子这回《三枪》一定能创造新的票房奇迹。
原本计划看《2012》的，不过正好赶上《三枪》上映，觉得大腕儿派张艺谋 + 演技派孙红雷 + 人气派小沈阳 + 搞笑派闫妮，能给我带来足够精彩的 90 分钟。
然而，看完后，对这部以喜剧标榜的年末贺岁电影，我只能用 失望  [...]]]></description>
			<content:encoded><![CDATA[<p>今天跟女友Yoyo一早就赶到东方新天地的新世纪影院（北京多家影院都有中午12点之前的场次票价减半的优惠），我们买了2张半价票，以比较便宜的价格看了下《三枪拍案惊奇》。</p>
<p>前一阵相关的报道很多，《三枪》还在北京电视台做了一个网游的发布晚会，在上映前造足了气势，把大家的胃口吊得很足，看样子这回《三枪》一定能创造新的票房奇迹。</p>
<p>原本计划看《2012》的，不过正好赶上《三枪》上映，觉得大腕儿派张艺谋 + 演技派孙红雷 + 人气派小沈阳 + 搞笑派闫妮，能给我带来足够精彩的 90 分钟。</p>
<p>然而，看完后，对这部以喜剧标榜的年末贺岁电影，我只能用 失望 这个词来形容。</p>
<p>2004年，张艺谋指导的《十面埋伏》上映，我一个大学同学对此片的评语为：剧情是硬伤！</p>
<p>这电影我也看了，对此评语表示十分赞同！不过画面倒是觉得很漂亮。</p>
<p>2006年，张艺谋指导的《满城尽带黄金甲》上映，我看的是DVD，看到一半，实在看不下去了，所以至今我都不知道这电影说的是什么事儿。好像记得有人说《黄金甲》是《雷雨》这部话剧的电影版，没看过《雷雨》，不做评价。但从我没能看完整部《黄金甲》这个事实来说，剧情依然是硬伤！不过画面依然觉得很漂亮。</p>
<p>2008年，北京奥运会，不能再用剧情这个词了，那天正好紧急处理服务器的事儿，没看全开幕式，不过就开场的几分钟那个效果来看，我觉得真是很漂亮。</p>
<p>2009年，《三枪拍案惊奇》，我自己评价：剧情是硬伤！画面很棒！</p>
<p>简单的描述下剧情：</p>
<p>主线：面馆儿的老板怀疑老婆跟伙计李四私通，暗地里贿赂巡逻兵杀了这对男女，结果反被巡逻兵谋财害命；<br />
副线：面馆儿的另外两个伙计想办法把老板拖欠的工钱偷回来，其中一个（赵六）不小心撞到巡逻兵，结果被杀；<br />
交叉线：阴差阳错，李四发现了老板的尸体，偷走埋了，然后误打误撞地跑到伙计赵六被埋的地方大便，被巡逻兵发现踪迹；<br />
结果：女伙计陈七提前跑路，李四被巡逻兵一箭穿心，巡逻兵被老板娘一枪毙命，电影结束。</p>
<p>我觉得一个故事，通常要表达出一个主题。</p>
<p>婚外情会导致灭门惨案？夸张了点吧？如果不是这个主题，我看不懂这个故事想说什么。</p>
<p>从喜剧的角度看，我觉得可乐的地方不多。可能我的笑点不够低。大部分可以被称之为笑点的地方，感觉都是生硬地套用网络流行语，或者重复小沈阳的招牌语调。</p>
<p>对于每天有很多时间在网上看转贴的我来说，见到这些笑点的次数太多，没有可乐的感觉了。</p>
<p>很多包袱都有东北二人转的味道，我不太喜欢二人转，因此更觉得不可乐。</p>
<p>相比之下，我还是喜欢《非诚勿扰》的京味儿冯氏幽默，那些台词让葛大爷说出来最正宗，最好玩儿。</p>
<p>回到剧情，剧情里稍微有些让我感兴趣的地方，就是在杀人之后，发生的一些巧合或者说是误会，让我看出了一点《疯狂的石头》和《疯狂的赛车》的感觉。</p>
<p>可惜这感觉刚开始没几分钟，电影就结束了。</p>
<p>总之，从剧情和喜剧效果来说，我给《三枪》的评价是：差。</p>
<p>说说好的地方。</p>
<p>画面和场景，非常棒！评价是：优。</p>
<p>室外开阔地：拍摄地点好像是西北的戈壁一带，橙黄色的山体和土地，在清澈的蓝天白云下，给我一种清净透亮的感觉。<br />
房屋和院子：老屋子，老砖，老墙，老马车，还有对方的瓦片和零碎，感觉物品丰富，很充实。<br />
室内：老饭碗，老柜子，老木头，老桌子，老板凳，老床，老窗户，特有饱经岁月的味道，颜色很入眼。<br />
过度场景：在一片戈壁山上，用固定的角度，记录太阳下山到月亮上山过程中，云层的移动、阴影的移动、光线的转变和月亮的轨迹，很漂亮。</p>
<p>再简单说说音效，可能我很少去电影院看电影吧，感觉音效很不错，尤其是刚开场的三声枪响，吓了我一跳，清脆 + 震撼。稍微遗憾的是，这电影音效不是卖点……</p>
<p>说到卖点了，我看，真正的卖点就是导演和演员。</p>
<p>张艺谋：奥运 + 图兰朵 + 60 周年大庆。<br />
孙红雷：电视剧《潜伏》。<br />
小沈阳：09 年央视春晚和北京台春晚。<br />
其他演员我不太了解，就不说了。</p>
<p>据说电影投资了一个亿，在影片的大部分时间里，只是 6 位演员转来转去，拍摄成本应该很低。倒是结束后，多人集体 MV 加上孙红雷的热舞颇有看点，我不知道是不是 MV 的拍摄成本比主要剧情还高？拍摄成本 + 演员的固定片酬应该不高，估计 3000 万够了，其他成本，都用在宣传和广告上面了吧？</p>
<p>也许我是妄加猜疑，在宣传造势上花这么大成本，是不是为了弥补影片在剧情和喜剧创意上的不足？反正我记得《非诚勿扰》，我是听朋友说很逗才去看的，没见太多广告。</p>
<p>晚上看首都经济报道，新画面董事长张伟平说了一句：“我敢说80%的观众到电影院是去看热闹的，不是看演技的。”</p>
<p>我又想了想，还真挺对的。我看《三枪》，不是因为它是喜剧，而是因为张艺谋、孙红雷和小沈阳，我是来看热闹的。</p>
<p>所以，我说，你想看热闹，我很推荐《三枪》，如果你想看剧情和喜剧效果，《三枪》会让你失望。</p>
<p>完。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leakon.com/archives/579/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>看看我写的 GFW 小故事</title>
		<link>http://www.leakon.com/archives/573?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e7%259c%258b%25e7%259c%258b%25e6%2588%2591%25e5%2586%2599%25e7%259a%2584-gfw-%25e5%25b0%258f%25e6%2595%2585%25e4%25ba%258b</link>
		<comments>http://www.leakon.com/archives/573#comments</comments>
		<pubDate>Wed, 09 Dec 2009 16:28:14 +0000</pubDate>
		<dc:creator>leakon</dc:creator>
				<category><![CDATA[GFW]]></category>
		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://www.leakon.com/?p=573</guid>
		<description><![CDATA[我是一个乖孩子，喜欢上网跟朋友们聊天、玩游戏

警察叔叔说，网上很黄很暴力，我却很傻很天真，不让我再看到我最爱的网站

直到有一天，一个无辜的小鸟被无情地封杀，我才意识到问题的严重性

面对河蟹坚硬的钳子，小鸟不能改变什么，唯一能做的，就是送上几句脱口秀解解气

据说那个墙，又黑又高，看到朋友们发来的结构图，我哭了

我再也看不见可爱的 Twitter 小鸟了么？
&#8230;
&#8230;
&#8230;
直到有一天，听到 Leakon 发出怒吼！

他说他能帮我穿过那道墙！
于是我认真地记下了他说的方法：

去淘宝买 VPN ，要买带 SSL 加密的，尽量提供多个 IP  [...]]]></description>
			<content:encoded><![CDATA[<p>我是一个乖孩子，喜欢上网跟朋友们聊天、玩游戏</p>
<p><img style="border: 1px solid black;" title="girl" src="http://www.leakon.com/wp-content/uploads/2009/12/girl.png" alt="girl" width="447" height="255" /></p>
<p>警察叔叔说，网上很黄很暴力，我却很傻很天真，不让我再看到我最爱的网站</p>
<p><img style="border: 1px solid black;" title="110" src="http://www.leakon.com/wp-content/uploads/2009/12/110.png" alt="110" width="300" height="300" /></p>
<p>直到有一天，一个无辜的小鸟被无情地封杀，我才意识到问题的严重性</p>
<p><img style="border: 1px solid black;" title="crab-and-twitter" src="http://www.leakon.com/wp-content/uploads/2009/12/crab-and-twitter.jpg" alt="crab-and-twitter" width="308" height="259" /></p>
<p>面对河蟹坚硬的钳子，小鸟不能改变什么，唯一能做的，就是送上几句脱口秀解解气</p>
<p><img style="border: 1px solid black;" title="twitter" src="http://www.leakon.com/wp-content/uploads/2009/12/twitter.gif" alt="twitter" width="458" height="281" /></p>
<p>据说那个墙，又黑又高，看到朋友们发来的结构图，我哭了</p>
<p><img style="border: 1px solid black;" title="route" src="http://www.leakon.com/wp-content/uploads/2009/12/route.png" alt="route" width="600" height="385" /></p>
<p>我再也看不见可爱的 Twitter 小鸟了么？</p>
<p>&#8230;</p>
<p>&#8230;</p>
<p>&#8230;</p>
<p>直到有一天，听到 Leakon 发出怒吼！</p>
<p><img style="border: 1px solid black;" title="up_for_free" src="http://www.leakon.com/wp-content/uploads/2009/12/up_for_free.png" alt="up_for_free" width="449" height="248" /></p>
<p>他说他能帮我穿过那道墙！</p>
<p>于是我认真地记下了他说的方法：</p>
<ol>
<li>去淘宝买 VPN ，要买带 SSL 加密的，尽量提供多个 IP ，没办法，穿墙总要花点钱</li>
<li>改用 OpenDNS （208.67.222.222 和 208.67.220.220），因为墙内的 DNS 就是不告诉你 IP</li>
<li>用 VMware 装 XP，XP 负责 VPN 拨号，注意 DNS 用 OpenDNS 的那 2 个 IP</li>
<li>在 XP 上装 CCProxy 作为代理服务器</li>
<li>使用 Firefox + FoxyProxy，把代理地址设为 XP 的 IP，FoxyProxy 可仅对域名白名单中的网站使用代理</li>
</ol>
<p>这是 Leakon 在 09 岁末为大家即兴创作的一个 2 分钟小剧本，希望大家喜欢。</p>
<p>谢谢观赏</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leakon.com/archives/573/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>IE IFrame Transparent 透明</title>
		<link>http://www.leakon.com/archives/560?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ie-iframe-transparent-%25e9%2580%258f%25e6%2598%258e</link>
		<comments>http://www.leakon.com/archives/560#comments</comments>
		<pubDate>Wed, 02 Dec 2009 08:54:21 +0000</pubDate>
		<dc:creator>leakon</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[IFrame]]></category>

		<guid isPermaLink="false">http://www.leakon.com/?p=560</guid>
		<description><![CDATA[用 Javascript 插入 IFrame 标签，在 Firefox、Chrome 等浏览器上，默认都是透明的，但 IE 有默认的白色背景。
本来，在 html 中写入 IFrame 标签，并加上 allowTransparent=&#8221;true&#8221; 这样的属性，IE 也一样可以透明，但今天的问题是必须用 Javascript 插入。
用 IE Developer ToolBar 测试，在 IFrame 的 src 页面的 body 样式上加上 backgroud:transparent 可以使 IFrame 透明。
但我们要用 Javascript，本域的 Javascript  [...]]]></description>
			<content:encoded><![CDATA[<p>用 Javascript 插入 IFrame 标签，在 Firefox、Chrome 等浏览器上，默认都是透明的，但 IE 有默认的白色背景。</p>
<p>本来，在 html 中写入 IFrame 标签，并加上 allowTransparent=&#8221;true&#8221; 这样的属性，IE 也一样可以透明，但今天的问题是必须用 Javascript 插入。</p>
<p>用 IE Developer ToolBar 测试，在 IFrame 的 src 页面的 body 样式上加上 backgroud:transparent 可以使 IFrame 透明。</p>
<p>但我们要用 Javascript，本域的 Javascript 脚本是没法设置跨域 IFrame 页面的，况且创建 IFrame 的时候还没设置 src，所以这个办法不行。</p>
<p>只能用个土办法，把 src 设置为一个绝对路径的 html 页面，这个页面你自己可以任意编辑，把 body 的样式设成透明即可。</p>
<p>注意，为了性能，只在 IE 浏览器下设置 src，Firefox 和 Chrome 都不用设置。</p>
<p>在这一点上，IE7 跟 IE6 一样弱，比现代浏览器差远了！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leakon.com/archives/560/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CUrl 蜘蛛 优化 CURLOPT_HEADERFUNCTION</title>
		<link>http://www.leakon.com/archives/546?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=curl-%25e8%259c%2598%25e8%259b%259b-%25e4%25bc%2598%25e5%258c%2596-curlopt_headerfunction</link>
		<comments>http://www.leakon.com/archives/546#comments</comments>
		<pubDate>Thu, 26 Nov 2009 17:23:37 +0000</pubDate>
		<dc:creator>leakon</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[创新]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[CUrl]]></category>

		<guid isPermaLink="false">http://www.leakon.com/?p=546</guid>
		<description><![CDATA[正搞一个小蜘蛛，用 CUrl 写的，遇到一个问题，分析完 url 后，有可能遇到 rar 或 jpg 等资源文件，也是要下载回来分析内容。
这样的做法太笨了，有很多缺点：

 浪费带宽，文件也许很大
 文件无用，下载回来也无法分析文件内容

怎么解决？
看浏览器会发送 Accept 指令，告诉服务器可接受的内容类型，但这不能阻止服务器返回不接受的内容，即哪怕请求的资源不在 Accept 列表中，仍然会把文件返回给客户端。
这方法不行。
想着，有没有办法，在得到服务器 response 的时候先分析 header，如果不是可接受的类型，就断掉连接，不必下载后续内容？
如果用 fsockopen  [...]]]></description>
			<content:encoded><![CDATA[<p>正搞一个小蜘蛛，用 CUrl 写的，遇到一个问题，分析完 url 后，有可能遇到 rar 或 jpg 等资源文件，也是要下载回来分析内容。</p>
<p>这样的做法太笨了，有很多缺点：</p>
<ol>
<li> 浪费带宽，文件也许很大</li>
<li> 文件无用，下载回来也无法分析文件内容</li>
</ol>
<p>怎么解决？</p>
<p>看浏览器会发送 Accept 指令，告诉服务器可接受的内容类型，但这不能阻止服务器返回不接受的内容，即哪怕请求的资源不在 Accept 列表中，仍然会把文件返回给客户端。</p>
<p>这方法不行。</p>
<p>想着，有没有办法，在得到服务器 response 的时候先分析 header，如果不是可接受的类型，就断掉连接，不必下载后续内容？</p>
<p>如果用 fsockopen 写的网络通讯接口，这一点很好实现。但 CUrl 怎么控制？</p>
<p>仔细看文档，找到一个选项 CURLOPT_HEADERFUNCTION。</p>
<p>这个选项要给一个回调函数作为参数，回调函数相当于一个触发器，CUrl 会把每一条 response 的 header 指令传给这个函数，由函数来决定如何执行后面的步骤。</p>
<p>回调函数要定义 2 个参数，第 1 个是 CUrl 的资源标识符，第 2 个是单独的一条 header 字符串。</p>
<p>如果想让 CUrl 继续下载后续内容，那么回调函数应该返回 header 字符串的长度：</p>
<p>return strlen($strOneHeader);</p>
<p>如果不想继续下载，直接返回数字 0，那么 CUrl 就会发送 TCP 的终止连接的指令，不会继续下载后续内容了。</p>
<p>加上这个触发器，经过测试，我的小蜘蛛可以成功地忽略非 text/html 类型的文件，大大加快了抓取速度，避免了很多问题！</p>
<p>小提示，给 CURLOPT_HEADERFUNCTION 设置回调函数的时候，文档上说要一个字符串形式的函数名作为参数。</p>
<p>这不准确。</p>
<p>实际上 PHP 可以指定任意类型的回调函数，可以是纯函数、类的静态方法和对象的方法：</p>
<ul>
<li> 纯函数：$callback = &#8216;my_callback_func&#8217;;</li>
<li> 类常量：$callback = array(&#8216;NAME_OF_CLASS&#8217;, &#8216;nameOfMethod&#8217;);</li>
<li> 对象方法：$callback = array($object, &#8216;publicMethod&#8217;);</li>
</ul>
<p>完。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leakon.com/archives/546/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>类常量 字符串 对比 性能测试</title>
		<link>http://www.leakon.com/archives/538?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e7%25b1%25bb%25e5%25b8%25b8%25e9%2587%258f-%25e5%25ad%2597%25e7%25ac%25a6%25e4%25b8%25b2-%25e5%25af%25b9%25e6%25af%2594-%25e6%2580%25a7%25e8%2583%25bd%25e6%25b5%258b%25e8%25af%2595</link>
		<comments>http://www.leakon.com/archives/538#comments</comments>
		<pubDate>Thu, 26 Nov 2009 02:54:05 +0000</pubDate>
		<dc:creator>leakon</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[原创]]></category>

		<guid isPermaLink="false">http://www.leakon.com/?p=538</guid>
		<description><![CDATA[写一个处理 url 的 PHP 工具类，需要用到很多字符串相关的函数，比如 preg_match、preg_replace、strpos 之类的。
正则表达式和查找的 needle 字符，都是用字符加引号直接作为参数传递给上述函数，比如：
preg_match(&#8220;#^http[s]?://#i&#8221;, $strUrl);
用以匹配是否是 http 开头的 url。
记得以前看过过类常量与普通常量的性能对比，类常量快得多，在这个例子上，把字符串传给函数，是不是每次调用都是先把字符串转换成内部变量呢？如果预先定义类常量，然后以常量为参数传给函数，是不是能快一点？像下面这样：
const  [...]]]></description>
			<content:encoded><![CDATA[<p>写一个处理 url 的 PHP 工具类，需要用到很多字符串相关的函数，比如 preg_match、preg_replace、strpos 之类的。</p>
<p>正则表达式和查找的 needle 字符，都是用字符加引号直接作为参数传递给上述函数，比如：</p>
<p>preg_match(&#8220;#^http[s]?://#i&#8221;, $strUrl);</p>
<p>用以匹配是否是 http 开头的 url。</p>
<p>记得以前看过过类常量与普通常量的性能对比，类常量快得多，在这个例子上，把字符串传给函数，是不是每次调用都是先把字符串转换成内部变量呢？如果预先定义类常量，然后以常量为参数传给函数，是不是能快一点？像下面这样：</p>
<p>const PREG_HTTP_URL = &#8216;#^http[s]?://#i&#8217;;</p>
<p>preg_match(self::PREG_HTTP_URL, $strUrl);</p>
<p>两种方式，性能肯定不一样，那种更快呢？</p>
<p>&#8230;</p>
<p>&#8230;</p>
<p>&#8230;</p>
<p>揭晓结果：</p>
<p>运行外层方法 50 万次各 3 次，取平均值<br />
字符串：[31284.85]q/s    [15.98]seconds<br />
类常量：[29175.49]q/s    [17.14]seconds</p>
<p>可以看到，用类常量的方式，性能不升反降！！</p>
<p>现在还不太理解为什么会这样。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leakon.com/archives/538/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows PHP dirname root</title>
		<link>http://www.leakon.com/archives/521?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=windows-php-dirname-root</link>
		<comments>http://www.leakon.com/archives/521#comments</comments>
		<pubDate>Thu, 05 Nov 2009 12:05:53 +0000</pubDate>
		<dc:creator>leakon</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[UnitTest]]></category>

		<guid isPermaLink="false">http://www.leakon.com/?p=521</guid>
		<description><![CDATA[遇到奇怪的问题，在 Windows 环境下，你猜 dirname(&#8216;/&#8217;) 返回虾米？
string(1) &#8220;\&#8221;
Linux 下呢？
string(1) &#8220;/&#8221;
换个参数，dirname(&#8216;/home/leakon/sofav.php&#8217;)，如果你认为上面的不同，是因为 Windows 的目录分隔符是反斜线 &#8220;\&#8221;，那下面的结果如何解释？
Windows: string(12) &#8220;/home/leakon&#8221;
Linux: string(12)  [...]]]></description>
			<content:encoded><![CDATA[<p>遇到奇怪的问题，在 Windows 环境下，你猜 dirname(&#8216;/&#8217;) 返回虾米？</p>
<p>string(1) &#8220;\&#8221;</p>
<p>Linux 下呢？</p>
<p>string(1) &#8220;/&#8221;</p>
<p>换个参数，dirname(&#8216;/home/leakon/sofav.php&#8217;)，如果你认为上面的不同，是因为 Windows 的目录分隔符是反斜线 &#8220;\&#8221;，那下面的结果如何解释？</p>
<p>Windows: string(12) &#8220;/home/leakon&#8221;</p>
<p>Linux: string(12) &#8220;/home/leakon&#8221;</p>
<p>再换参数，dirname(&#8216;D:\Leakon\Code\sofav.php&#8217;)</p>
<p>Windows: string(14) &#8220;D:\Leakon\Code&#8221;</p>
<p>Linux: string(1) &#8220;.&#8221;</p>
<p>奇怪吧，为什么有这么大区别呢？</p>
<p>现在还不太清楚，提供一下我的测试环境：</p>
<p>Windows 下存在 D:\Leakon\Code\sofav.php 这个文件，Linux 下存在 /home/leakon/sofav.php。</p>
<p>等搞明白回来顶，看到的，用到的，留心记一下吧。</p>
<p>顺便说下，这个问题，是用单元测试发现的。</p>
<p>我知道很多开发者都懂单元测试，我也知道很多开发者并没有切身去实践单元测试。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leakon.com/archives/521/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>谷歌网上图书馆 一座永远的图书馆 vs CCTV2 今日观察</title>
		<link>http://www.leakon.com/archives/481?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e8%25b0%25b7%25e6%25ad%258c%25e7%25bd%2591%25e4%25b8%258a%25e5%259b%25be%25e4%25b9%25a6%25e9%25a6%2586-%25e4%25b8%2580%25e5%25ba%25a7%25e6%25b0%25b8%25e8%25bf%259c%25e7%259a%2584%25e5%259b%25be%25e4%25b9%25a6%25e9%25a6%2586-vs-cctv2-%25e4%25bb%258a%25e6%2597%25a5%25e8%25a7%2582%25e5%25af%259f</link>
		<comments>http://www.leakon.com/archives/481#comments</comments>
		<pubDate>Wed, 21 Oct 2009 18:14:17 +0000</pubDate>
		<dc:creator>leakon</dc:creator>
				<category><![CDATA[原创]]></category>
		<category><![CDATA[愤青]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.leakon.com/?p=481</guid>
		<description><![CDATA[没想到CCAV用这么大篇幅来抨击Google图书馆。
在我看来，可能G.cn不想交保护费，然后某色社会，向基地组织学习，在实施罪恶之前，给出一段录像，算是恐吓。
看了cnBeta的众多评论，尤其是看到很多G粉儿的一片声讨CCAV的声势，我在些许欣慰之余，不免有些担心。
在天朝这样的国度里，最广大人民的根本利益，注定是要被黑老大们QJ的。怎奈我无力劝说所有的仍然心存良知的可爱的人们，其实你们可以在评论里一致祝福CCAV越办越好的，当黑老大们看到你们的愿望，便会搞死CCAV让你们享受“快感”。
实事求是，我也是G粉儿，我觉得很正常，痴迷于技术的人，怎会不是G粉儿？
反过来说，断章取义，唯恐世界变革 [...]]]></description>
			<content:encoded><![CDATA[<p>没想到CCAV用这么大篇幅来抨击Google图书馆。</p>
<p>在我看来，可能G.cn不想交保护费，然后某色社会，向基地组织学习，在实施罪恶之前，给出一段录像，算是恐吓。</p>
<p>看了cnBeta的众多评论，尤其是看到很多G粉儿的一片声讨CCAV的声势，我在些许欣慰之余，不免有些担心。</p>
<p>在天朝这样的国度里，最广大人民的根本利益，注定是要被黑老大们QJ的。怎奈我无力劝说所有的仍然心存良知的可爱的人们，其实你们可以在评论里一致祝福CCAV越办越好的，当黑老大们看到你们的愿望，便会搞死CCAV让你们享受“快感”。</p>
<p>实事求是，我也是G粉儿，我觉得很正常，痴迷于技术的人，怎会不是G粉儿？</p>
<p>反过来说，断章取义，唯恐世界变革影响自己的不劳而获的生活的不是G粉儿的人，怎会不是无知的SB？</p>
<p>前一阵看过一个介绍中国最初修建铁路历程的纪录片，给我很大感悟。那会儿全中国只有李鸿章支持修建铁路，可惜那会儿他还只是浙江巡抚，影响力有限。但在当时，算作洋务派代表的李鸿章，几乎是只身一人，面对大清国上上下下从太后到平民百姓所代表的顽固派，进行力量悬殊的斗争。</p>
<p>那会儿的官民倒成了一家人，说火车样子诡异，乃不祥之物，鸣音巨大，有伤风水。</p>
<p>像！真是惊人的相似，今天在CCAV上看到的这帮坐家们和砖家们的顽固不化的嘴脸，怎么跟200年前大清朝那帮愚昧的官民一副德性？</p>
<p>我正好看了谷歌中国的黑板报，引用了 Sergey Brin 的一片文字：<a href="http://googlechinablog.com/2009/10/blog-post_20.html">《一座永远的图书馆》</a></p>
<p>请允许我在本文的最后全文引用这篇文字，我怕被黑老大们当大闸蟹给河蟹了。</p>
<p>我之前，有个梦想，把世界上所有有价值的文字、声音、影像全部记录下来，以供现在的我们和未来的人们学习、参考、回忆。</p>
<p>不过放眼世界，当今有能力做这件事的，也就只有谷歌了。</p>
<p>我只能感恩地谢谢地球那边的上帝，让 Larry Page 和 Sergey Brin 没有像天朝的企业家们一样坐拥财富之后便吃喝嫖赌抽，感谢上帝让两位天才也有了造福世界，造福后代的想法，并已经有了实际行动。</p>
<p>我看《明朝那些事儿》，讲到朱元璋的第四个儿子朱棣，取代朱允炆，开创永乐盛世，并修建了一部涵盖当时社会文明所有内容的《永乐大典》，这真的可以称之为前无古人，后无来者。这套书我印象中有几万卷，但后代被损，也在八国联军入侵之时被严重损毁，现今能找到的只有几十卷！看到这部分的时候我震惊了！我觉得这是中华民族文明财富的极大损失！</p>
<p>我很喜欢逛故宫，看完历史书，就更喜欢去故宫再看看，感觉身在其中，似乎能体会到几百年前的景象。我很遗憾，这一切只能是空想，看过所有的古装电视剧，也无法真正还原古代的社会形态。还好现在有了录音机、照相机、摄像机，可以让今天的世界，如实地展现给200年之后的人们。不过我们现在只是历史的“正在扮演者”，不能以历史的“后期观察者”身份看到古老的历史原貌。</p>
<p>呵呵，真是具有讽刺意味，我不知道怎么想出一个“后期观察者”这个词，看看标题，CCAV的“今日观察”，多么巧合的对比！你们那点思维，也只能今日观察，或观察今日了。</p>
<p>也许我东一句西一句的语言，不能让你完全明白我的意思，没关系，先让这些文字留在这里吧，日后我们回来再看，或者最好保存100年，让后代的学生当文言文要求背诵！</p>
<p>如果真的不明白，那么请看 Sergey Brin 的 <a href="http://googlechinablog.com/2009/10/blog-post_20.html">《一座永远的图书馆》</a>，现全文引用如下：</p>
<p><a href="http://googlechinablog.com/2009/10/blog-post_20.html">http://googlechinablog.com/2009/10/blog-post_20.html</a></p>
<h3><a name="8774516694817420057">一座永远的图书馆</a></h3>
<p><span id="time8774516694817420057">2009年10月20日 下午 07:33:00</span></p>
<p><span>发表者：谢尔盖•布林（Sergey Brin）</span><br />
<span>转载自《纽约时报》</span></p>
<p>2009年10月8日，山景城，加利福尼亚</p>
<p>“电车没有得到普及的根本原因在于（1）生产商的失误：他们没能恰当地向大众宣传电车的实用性；（2）电力公司的失误：他们没能提供足够多的充电站和变压站，让人们更为方便地拥有和使用电车。早期电车在速度、行驶里程和实用性上的限制给人们的印象至今依然存在。”</p>
<p>这 个引述一点也不会让那些了解电车的人感到吃惊。不过，如果这些话是在一个世纪之前听到的，那时电车年产量仅有几千或上万辆的时候，可能就会有些惊人了。这 是出现在1916年的一本杂志《电气世界》（Electrical World）某期上的一个议题，是我在可供人们搜索上千万本图书的资料馆——“谷歌图书（Google Books）”上找到的。关于当代的一个问题要回顾几百年来探讨，看似很奇怪，但是我常常觉得过去对于未来有着极为宝贵的借鉴意义。在这里，我很幸运—— 20世纪早期，关于电车的研究和记载非常广泛，而且有很多关于这一主题的书可供选择。因为1923年之前出版的书都是公开的，我很容易查看到它们。</p>
<p>但 是人类已经撰写的绝大多数图书并不是每个人都可以得到的，除非是那些在一流学术图书馆（premier academic libraries）中执着工作的研究人员。1923年之后所著的书籍很快消失在图书馆“黑洞”。除了个别特例，读者只能在图书出版销售的几年之内买到这 些书，之后，只能在少数图书馆、二手书店找到它们。再往后，随着岁月流逝，合约被丢弃了、遗忘了，作家、出版商消失了、不见了，版权所有者的踪迹也难以寻 觅。</p>
<p>不可避免地，仅存的几本书也只能慢慢腐化，或者在大火、洪水或其他灾害中失踪。1998年我在斯坦福大学的时候，洪水损害、毁坏了上 万本图书。不幸的是，这样的事时常发生——一场类似的洪水20年前就曾在斯坦福发生过。你可以在1980年出版的《斯坦福-洛克希德•迈耶图书馆洪水报 告》（The Stanford-Lockheed Meyer Library Flood Report）中读到这段经历，但是这本书再也找不到了。</p>
<p>图 书是世界共有知识、文化遗产的重要组成部分，因此谷歌联合创始人拉里•佩奇（Larry Page）在10年前就首先提出了将所有书籍数字化的建议，那时的谷歌还是一家羽翼尚未丰满的新公司。那时，这项工程看起来如此狂妄自大、充满挑战，我们 无法吸引人们加入进来。但是五年以后，也就是2004年，“谷歌图书”（Google Books）（当时被称作Google Print）诞生了，可以让用户搜索到几十万本图书。今天，这个数字已经超过了一千万，并且仍在增加。</p>
<p>次年，我们受到了美国作家协会 （Authors Guild）和美国出版商协会（Association of American Publishers）对于这个项目的起诉。虽然我们之间有分歧，但却也拥有共同的目标，那就是打开禁锢在无数绝版书籍中的智慧，当然也会公平地对版权所 有人进行补偿。于是，我们共同努力达成了和解，以实现我们的共同目标。这一协议旨在让图书作者、出版商和谷歌实现共赢，不过实际上真正的赢家是那些能够获 得一片极为宽广的书籍天空的广大读者们。</p>
<p>这一协议也是颇受争议的，很多团体都积极发表意见，褒贬皆有。我想借此机会来澄清关于协议的一些 事宜，并且说明我对这个计划感到自豪的原因。这项协议旨在让成百上千万绝版但受版权保护的书籍“复生” ，或者会对读者收取一定费用，或者在广告支持下免费，但是大多数收入会归版权持有人，无论是作者还是出版商。</p>
<p>有些人说这个协议类似一种强 制许可证，就像集体诉讼和解一样，如果会员在某一规定日期之前不提出退出，那么该协议将对所有会员有效。而事实是，版权所有人可以在任何时候设定图书价格 及访问权或者从“谷歌图书”退出。对于那些版权所有人尚未出现的图书，将会为其制定合理的默认价格和访问规则。这既让读者能够读到尚未找到版权持有人的 “孤品”，也能为版权所有者不断累积资金，直至成为他们“不再隐身”的动力。</p>
<p>其他人对于协议在竞争方面的影响产生了质疑，或者断言这会限 制消费者对绝版图书的选择。事实上，这项协议根本没有限制其他公司或者组织作出类似的努力。此协议在绝版图书方面对消费者选择的限制，也只不过像是限制消 费者选择传说中的独角兽那样。如今，如果你想要得到一本绝版图书，只有一个选择——飞到美国几所一流的图书馆，并期待着能在书架上找到它。</p>
<p>我 希望能有一百种类似服务，那样我就能很容易地阅读到某一本书；那样将会节省很多时间，而且会为谷歌省掉很大力气。但是，尽管如今有不少数字化项目正在进行 （谷歌甚至为其他一些同类机构提供资金支持，包括国会图书馆的一些机构），但是没有一个颇具规模，造成这一现象的原因就是因为没有其他人选择为必要资源进 行投资。如果想要有一百个这样的项目，那现在至少要有这样一个服务存在。</p>
<p>如果“谷歌图书”成功了，其他项目也会效仿，那么他们将会有捷径 可走：这个协议创立了“图书版权登记簿”（books rights registry），鼓励版权持有人现身，这样其他项目将可更方便地获得许可。虽然新项目不会立即对无人认领的作品（或“孤品”）享有同等权利，但至少这 个协议为类似诉讼的和解提供了方向，而且它是“孤品”的立法先驱，谷歌一直并将继续为此提供支持。</p>
<p>最后，对于“谷歌图书”这一产品以及协 议中所展望的未来服务的具体几个方面还有反对的声音，包括对于文献目录信息质量、我们对于分类系统的选择以及隐私条款细节的质疑。这些都是合理的问题，作 为一家极为关注产品质量的公司，我们会不懈努力来解决这些问题，不断完善文献目录信息、改善分类方法，进一步细化我们的隐私条款。而且，如果我们不能正确 提供产品，就会被其他人取代。但有一件事可以确定：无论停止哪项进程，事情最终都不会得以解决。</p>
<p>我在“谷歌图书”上找到的 《1880-1881保险年鉴》（Insurance Year Book 1880-1881）中，Cornelius Walford按照时间顺序记载了几十座图书馆和几百万册图书的毁灭，他希望这样的记载能够让人们意识到做这样一些事来保存图书的必要性。亚历山大一个著 名的图书馆曾发生过三次火灾，分别在公元前48年、公元273年和公元640年，就像美国国会图书馆一样，1851年的一次大火烧毁了三分之二的藏书。</p>
<p>我 希望这样的毁坏永远不要再发生了，但历史证明并非如此。更重要的是，即使我们的文化遗产在世界最一流的图书馆保存得完好无损，但是如果不能让人们轻易读 到，那也形同虚设。很多公司、图书馆和组织在保存、提供20世纪藏书的工作中都发挥了作用。图书作者、出版商以及谷歌，他们共同朝着这个目标迈出了仅仅一 步，但却是非常重要的一步。让我们抓住这次机遇，不要错过！</p>
<p>谢尔盖•布林（Sergey Brin）是谷歌的联合创始人和技术总裁。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leakon.com/archives/481/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SofavDB_Debug_PDO MySQL 执行时间 日志</title>
		<link>http://www.leakon.com/archives/340?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sofavdb_debug_pdo-mysql-%25e6%2589%25a7%25e8%25a1%258c%25e6%2597%25b6%25e9%2597%25b4-%25e6%2597%25a5%25e5%25bf%2597</link>
		<comments>http://www.leakon.com/archives/340#comments</comments>
		<pubDate>Thu, 08 Jan 2009 18:58:54 +0000</pubDate>
		<dc:creator>leakon</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web开发]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[PDO]]></category>

		<guid isPermaLink="false">http://www.leakon.com/?p=340</guid>
		<description><![CDATA[这个类可以完全替代 PDO，如果你需要知道自己的程序跟 MySQL 交互花费多少时间，而你又有洁癖，不想把自己的代码搞得一团糟，那我强烈地建议你试试这个 SofavDB_Debug_PDO。
通常，创建一个 PDO 连接，都是 new PDO()。
在开发环境中，你只需要把上面那个语句替换成 new SofavDB_Debug_PDO() 即可。
然后，凡是通过 prepare 的 statement 执行的任何查询和修改的语句，执行时间都能记录下来。
最后，通过 SofavDB_Debug_PDO::getTimer()  [...]]]></description>
			<content:encoded><![CDATA[<p>这个类可以完全替代 PDO，如果你需要知道自己的程序跟 MySQL 交互花费多少时间，而你又有洁癖，不想把自己的代码搞得一团糟，那我强烈地建议你试试这个 SofavDB_Debug_PDO。</p>
<p>通常，创建一个 PDO 连接，都是 new PDO()。</p>
<p>在开发环境中，你只需要把上面那个语句替换成 new SofavDB_Debug_PDO() 即可。</p>
<p>然后，凡是通过 prepare 的 statement 执行的任何查询和修改的语句，执行时间都能记录下来。</p>
<p>最后，通过 SofavDB_Debug_PDO::getTimer() 就可以得到一个数组，极其方便……</p>
<p>当然，这个类的执行效率会有一些小小的下降，不适合用于生产环境。</p>
<p>源码请见 GoogleCode：</p>
<p><a title="SofavDB Debug PDO" href="http://leakon.googlecode.com/svn/trunk/leakon/php/sofav_db/SofavDB_Debug_PDO.php">http://leakon.googlecode.com/svn/trunk/leakon/php/sofav_db/SofavDB_Debug_PDO.php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.leakon.com/archives/340/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

