<?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>朱俊独立博客</title>
	<atom:link href="http://www.zhujun.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zhujun.org</link>
	<description>邪恶获得胜利的唯一条件，就是善良的人们保持沉默。</description>
	<lastBuildDate>Sun, 05 Sep 2010 13:58:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>独立博客创建教程 &#8211; 域名篇</title>
		<link>http://www.zhujun.org/web/register-your-own-domain/</link>
		<comments>http://www.zhujun.org/web/register-your-own-domain/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 13:55:36 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[个性域名]]></category>
		<category><![CDATA[独立博客]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=344</guid>
		<description><![CDATA[独立博客创建教程之域名篇，包括为什么要注册顶级域名，域名相关知识，常见顶级域名后缀的介绍和注册注意事项等。]]></description>
			<content:encoded><![CDATA[<p>注册一个顶级域名是开始独立博客的第一步，有人说“好域名不一定成就一个好网站，但好网站通常拥有一个好域名”。<br />
所以为自己的博客挑选一个独一无二的域名吧。<span id="more-344"></span></p>
<h3>什么是域名</h3>
<p>貌似是个很小白的问题，不过真要完全解释清楚，会牵涉到很多知识，可以写几篇论文了。</p>
<p>维基百科对域名的定义：域名（Domain Name），是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称，用于在数据传输时标识计算机的电子方位（有时也指地理位置）。</p>
<p>汗，好拗口，看些例子就明白了：google.com 、www.google.com.hk 、translate.google.cn 。</p>
<h3>顶级域名和二级域名</h3>
<p>这两个定义国内外不一样，本文使用国内的定义。</p>
<p>国外把 .com 、.net 这种后缀称为 Top-level domain ，把 google.com、wikipedia.org 中的google和wikipedia称为Second-level domain。</p>
<p>国内把163.com、sina.com.cn 这种称为顶级域名，而把 news.163.com 、blog.sina.com.cn 这种称为二级域名。<br />
大部分网站的地址都是www.xxx.xx，其中的“www”同样是一个二级域名。</p>
<p>一般国内的BSP (Blog Service Provider) 会免费给你一个二级或者三级域名 ，如：sinofreebird.blogchina.com 、 ssnly100.blog.163.com 。</p>
<h3>为什么要注册顶级域名</h3>
<ul>
<li>拥有域名的所有权<br />
你在各大博客网站注册的二级、三级域名，只有使用权，没有所有权，对方随时可以回收你的域名。而自己注册并续费顶级域名，意味着你拥有这个域名，并可以出售给他人。</li>
<li>拥有域名的管理权<br />
自己管理顶级域名，意味着你可以设立无数个二级域名。<br />
如：www.yourdomain.com 作为个人门户，blog.yourdomain.com 作为博客， work.yourdomain.com 作为网上工作平台。</li>
<li>拥有自己的域名邮箱<br />
域名邮箱比免费邮箱更能让人产生信任感，如： webmaster@yourdomain.com、www@yourdomain.org 。</li>
</ul>
<h3>通用顶级域名和国家地区顶级域名</h3>
<p>常见的通用顶级域名后缀有：.biz .com .edu .gov .info .int .mil .name .net .org .pro 等。<br />
通用顶级域名一般向全世界互联网用户开放注册，不以地域作为限制，但可能会对申请人的性质、行业有限制，比如 .edu 只面向教育机构，.gov 只面向政府机构。</p>
<p>常见的国家地区顶级域名后缀有：.cn（中国大陆）、.de（德国）、.us（美国）、.eu（欧盟）、.hk（香港）、.la （老挝）、.cc（科科斯群岛）等等。<br />
大部分国家地区顶级域名对全世界开放注册，但也有相当一部分后缀只对该国公民和企业开放。</p>
<p>更多的后缀，参见维基百科上的说明：<a href="http://zh.wikipedia.org/zh-cn/%E5%9F%9F%E5%90%8D" target="_blank">http://zh.wikipedia.org/zh-cn/域名</a></p>
<h3>如何选择顶级域名</h3>
<p>那么多顶级域名后缀，究竟该选择哪种注册呢？</p>
<p>一般首选 .com，其次 .org 和 .net ，因为这些域名使用最广泛，方便用户记忆，在搜索引擎中也有较高的权限。<br />
但这些域名，你能想到的前缀大部分已经被注册了，所以你可以尝试其它较生僻后缀，某些前缀和后缀，可以组成很酷的<strong>个性域名</strong>，比如<em> kevin.name、t.md、niu.bi 、fla.sh、goo.gl、del.icio.us、va.vb.vc</em> 等等。</p>
<p>另外，一些特别的域名可以创造出特别的email地址，比如：<em>wo@niu.bi 、ni@sha.bi 、julie@willyoumarryme.com</em> 。</p>
<h3>如何注册顶级域名</h3>
<p>常见的后缀如.com/.net/.org 一般在7-8美元一年。注册商首选<a rel="nofollow" href="http://www.godaddy.com" target="_blank">GoDaddy</a>和<a rel="nofollow" href="http://smallbusiness.yahoo.com/domains/?p=BESTDEAL" target="_blank">Yahoo</a>，前者不时送出一些$0.99的特价优惠码，续费也不贵；后者则随时可以以$1.99注册首年，续费较贵，但可以转出。</p>
<p>GoDaddy和Yahoo的域名注册步骤很简单，无非就是这么四步：</p>
<ol>
<li>注册网站帐户</li>
<li>查询域名是否已被注册</li>
<li>没有被注册则加入购物车</li>
<li>付款。</li>
</ol>
<p>英文不好的童鞋可以搜索详细的图文教程，另外Yahoo只支持 PayPal/信用卡 付款，GoDaddy还额外支持支付宝。</p>
<p>较少见的国别后缀如 .ai/.bi/.cc/.de/.la/.lu/.me/.se/.sh/.tv/.vc 等等价格较高，一般从十几美元至100欧元一年不等。注册商也千奇百怪，不同的注册商价格差很多，另外，有些oneman的注册商还存在着抢夺你域名的风险，所以需要选择官方注册局或者大的注册商。</p>
<p>查询某个域名是否被注册，可以上<a rel="nofollow" href="http://www.101domain.com/" target="_blank">http://www.101domain.com/</a> 101domain几乎支持所有的域名后缀，但不推荐在该网站注册，一是因为价格高，二是因为他们很多后缀是手工操作，注册过程慢，而且存在抢注风险。</p>
<p>我收藏着一些个性域名，如果看中某个后缀却不知去哪里注册便宜又放心的话，可以咨询我。</p>
<h3>注册域名注意事项</h3>
<ul>
<li>不要在国内注册商处注册域名<br />
国内注册商的劣迹有：<br />
随时听从有关部门命令，Hold你的域名，导致你网站无法访问。<br />
制造域名转出障碍，拒绝提供转移码，除非你邮寄一大堆资料和表格过去，让你感觉域名不是你自己的。</li>
<li>不要注册 .cn 结尾的域名。<br />
由于一些SB的SB政策，cn域名在一年内从1200多万个减至600多万个。<br />
除非你不怕备案麻烦，不怕域名被Hold，不怕域名被回收，否则还是暂时敬而远之的好。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/register-your-own-domain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>独立博客创建教程</title>
		<link>http://www.zhujun.org/web/create-your-own-blog/</link>
		<comments>http://www.zhujun.org/web/create-your-own-blog/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 08:45:43 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[独立博客]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=336</guid>
		<description><![CDATA[独立博客创建教程，介绍了独立博客的概念、优点等内容，把创建过程简单地分成注册域名、购买空间、安装程序三步。]]></description>
			<content:encoded><![CDATA[<p>一直想写套完整的独立博客创建教程，今天看到有朋友在论坛求助，打算分享我的一些经验和建议。</p>
<h3>什么是独立博客</h3>
<p>在新浪、网易等BSP那里可以免费开通博客，独立博客和上诉博客最大区别在于：</p>
<ul>
<li>你注册并拥有自己的博客域名，域名是你一笔隐形的财富。</li>
<li>你购买并拥有自己的博客空间，可以充分DIY、随意捣腾。</li>
<li>你撰写并负责自己的博客内容，没有人可以删除你的文章，除了你自己。</li>
</ul>
<h3>为什么要有独立博客</h3>
<p>独立博客有很多好处，比如拥有自己的品牌（域名），交到志同道合的朋友，可以赚取自己应得的广告费，而不是像韩寒那样为新浪免费打工。</p>
<p>但在我看来，独立博客最大的优点是，她让你不必再看管理员眼色行事，不必替换那些可笑的敏感词；她培养你独立的思想，帮助你拥有独立的人格。而在天朝，上述这些都是很奢侈的事情。<span id="more-336"></span></p>
<h3>如何创建独立博客</h3>
<p>创建一个独立博客只需要三步：</p>
<ol>
<li><a href="/web/register-your-own-domain/">注册一个顶级域名</a>。<br />
首选 .com，其次 .org 和 .net ，如果想不到合适的前缀，可以尝试个性域名，比如 kevin.name、t.md、niu.bi 、Fla.sh、va.vb.vc、等等。</li>
<li>购买一个博客空间。<br />
购买或和朋友合租一个虚拟主机、VPS、甚至独立主机。</li>
<li>安装、设置独立博客程序。<br />
WordPress、Bo-Blog等博客程序都拥有详细的安装教程。</li>
</ol>
<p>额，好简略的独立博客创建教程，一点也不完整，好吧，我会就这三步再写三篇详细的文章。</p>
<p>不过先提醒性急的朋友，不要在国内域名商处注册域名，不要购买国内的博客空间，否则就等着被折腾吧，还不如去新浪开博呢。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/create-your-own-blog/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>拒绝哀悼</title>
		<link>http://www.zhujun.org/speak-up/refuse-to-mourn/</link>
		<comments>http://www.zhujun.org/speak-up/refuse-to-mourn/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 15:12:50 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[闲言碎语]]></category>
		<category><![CDATA[哀悼]]></category>
		<category><![CDATA[舟曲]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=327</guid>
		<description><![CDATA[哀悼不反思，多难不兴邦，为了纪念逝去的同胞，为了避免逝去更多同胞，我谨代表我自己，拒绝哀悼。]]></description>
			<content:encoded><![CDATA[<p>今天又是哀悼日了。</p>
<p>两年多来的第三次哀悼，请允许我打个“又”字。</p>
<p>这几年确实多灾多难，有人鼓励说，多难可以兴邦，可我却发现难越来越多，邦却没有兴。</p>
<p>《舟曲县志》曾记载：“舟曲山地，层峦叠嶂，万山皆翠”，但舟曲事发前的照片却是这样的：<br />
<span id="more-327"></span><br />
<img src="/wp-content/uploads/2010/08/zhouqu.jpg" alt="舟曲" /></p>
<p>据统计，从舟曲县林业局成立到1990年，累计采伐森林189.75万亩，许多地方沦为残败的次生林。加上倒卖盗用，舟曲的森林覆盖率一路从最初的67％，下降到现在的20％。</p>
<p>面对那么多兴邦级灾难，窃以为，多难当且仅当人们反思灾难产生的原因，问责灾难相关的人员，吸取灾难造成的教训时才有可能兴邦。</p>
<p>而我们所做的，一是将责任推给老天爷，派出各种专家论证这是百年乃至万年一遇的灾难；二是包庇相关责任人员，古时候的封建统治者面对天灾还会下罪己诏，我们却鲜有官员被问责；三是发动全国人民一起哀悼，用CCTV和人民日报这两朵媒体奇葩把丧事办成喜事。</p>
<p>同样是地震，学校是日本人第一避难场所，因为他们的校舍最坚固，我们则恰恰相反。<br />
同样是漏油，BP被美国、墨西哥天天骂，还被八杆子打不着的CCTV天天骂，中石油却可以超然脱俗，化腐朽为神奇，于近日召开了“7·16”火灾事故抢险救援表彰大会。</p>
<p>难怪有网友总结了兴邦级灾难办理流程：“事发-＞清场-＞不报道-＞删帖-＞通稿-＞鼓励自救-＞选好角色-＞剧组开机-＞CCAV谎言造势-＞后期剪辑-＞全国巡演-＞树立榜样-＞领导颁奖-＞多难兴邦-＞爱国情涌动-＞再创奇迹”。</p>
<p>这次事件，同样挖掘了两名主要角色，一位是上海电力学院的杨同学，七名亲人因泥石流失踪，但他却继续奋战在世博园志愿者的第一线，伟大；第二位是个武警战士，他不救距自己400米远的妻子，只为呆在原地多救几个人，好伟大。</p>
<p>一个人需要多么高的道德水准才能达到如此地忘记亲人，服务他人的境界啊！</p>
<p>不过我对我们国家有这样的伟人一点也不感到意外，因为我们本身就是个伟大的国家。<br />
这不，一边是舟曲缺乏饮用水和方便面，政府号召大家积极捐献；一边是为支持俄罗斯抗灾，我国将捐赠100万美元现金和价值2000万人民币的物资，空运送往俄国。</p>
<p>一个国家需要多么高的道德水准才能达到如此地忘记百姓，服务友邦的境界啊！</p>
<p>作为一个屁民，我是无法理解这种思想水平的，就像我无法理解包二奶的官员抓捕并罚款看黄片的百姓；一年公款消费超9000亿的国家，教育经费占GDP比例还不如非洲穷国乌干达；一直号召屁民们捐款的政府，自己却可以花几千亿搞各种盛会。</p>
<p>今天，道德楷模告诉我，你要哀悼，要停止一切娱乐活动，电视的遥控器被我们换了，你不能换台，影院、棋牌室也被我们关了，游戏不能打，视频不能看，音乐不能听，网页要变成灰色，以表达对死者的哀悼之情。<br />
可是道德楷模在前几天刚命令网站查删“媒体05年报道甘肃舟曲水土流失:熊猫栖息地遭毁”等相关报道，并禁止各地都市類報紙派記者到災區採訪，規定只准用官方通稿。</p>
<p>作为一个屁民，我又无法理解了。</p>
<p>逝去的同胞真的需要全国人民的哀悼吗？<br />
我相信他们更希望相关的责任人可以被问责，他们希望他们的死可以换来对环境的保护和对灾害的预防，他们更希望他们活着的亲人不会再不明不白死去。</p>
<p>这些，真不是哀悼可以解决的。<br />
我不反对哀悼本身，我反对把哀悼形式化，更反对利用哀悼转移矛盾，洗脱罪责。<br />
只要有用油漆涂山搞“绿化”的官员存在，就会有更多的人死于泥石流；只要公民的监督权被剥夺，就会有更多的人“被灾难”。</p>
<p>2008年5月19日，我认真地参与了哀悼汶川地震遇难同胞的活动，起立、默哀三分钟。<br />
2010年4月21日，尽管我认为文化部没有权力剥夺公民娱乐的权利，但我还是在心中为玉树灾民祈福。<br />
2010年8月15日，为了纪念逝去的同胞，为了避免逝去更多同胞，我谨代表我自己，拒绝哀悼。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/speak-up/refuse-to-mourn/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>PHP学习笔记2 &#8211; 用文件来存取数据</title>
		<link>http://www.zhujun.org/web/php-study-notes-storing-retrieving-data/</link>
		<comments>http://www.zhujun.org/web/php-study-notes-storing-retrieving-data/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 10:45:51 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[学习笔记]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=295</guid>
		<description><![CDATA[PHP学习笔记之存取数据部分，主要介绍了用文件而非数据库的方法保存和读取数据，包括打开、创建、关闭、读、写、锁、删除文件等内容。]]></description>
			<content:encoded><![CDATA[<p>PHP学习笔记第二章，主要包括打开/创建/关闭/锁定/删除文件，从文件中读/写数据等内容。<br />
<span id="more-295"></span></p>
<h3>一、打开文件</h3>
<p>文件操作的基本步骤是：打开文件&#8211;&gt;读/写文件&#8211;&gt;关闭文件，其中打开文件是第一步。</p>
<h4>1、使用 fopen() 打开文件</h4>
<p>fopen() 函数定义：<br />
<code>resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )</code></p>
<p>fopen() 函数示例：<br />
<code>$handle = fopen("/home/rasmus/file.txt", "r");<br />
$fp = fopen("$_SERVER['DOCUMENT_ROOT']/../orders/orders.txt",'w'); </code><br />
注意，使用绝对路径时，Linux下是/xxx/，而Windows下是x:\xxx\，一般推荐使用相对目录。</p>
<h4>2、打开文件模式</h4>
<p>和c语言类似，fopen()同样通过mode参数来确定打开文件的访问类型。</p>
<table>
<tbody>
<tr>
<th>mode</th>
<th>说明</th>
</tr>
<tr>
<td>&#8220;r&#8221;</td>
<td>只读方式打开，将文件指针指向文件头。</td>
</tr>
<tr>
<td>&#8220;r+&#8221;</td>
<td>读写方式打开，将文件指针指向文件头。</td>
</tr>
<tr>
<td>&#8220;w&#8221;</td>
<td>写入方式打开，将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。</td>
</tr>
<tr>
<td>&#8220;w+&#8221;</td>
<td>读写方式打开，将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。</td>
</tr>
<tr>
<td>&#8220;x&#8221;</td>
<td>创建并以写入方式打开，将文件指针指向文件头。如果文件已存在，则 fopen() 调用失败并返回 FALSE，并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。</td>
</tr>
<tr>
<td>&#8220;x+&#8221;</td>
<td>创建并以读写方式打开，将文件指针指向文件头。如果文件已存在，则 fopen() 调用失败并返回 FALSE，并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。</td>
</tr>
<tr>
<td>&#8220;a&#8221;</td>
<td>写入方式打开，将文件指针指向文件末尾。如果文件不存在则尝试创建之。</td>
</tr>
<tr>
<td>&#8220;a+&#8221;</td>
<td>读写方式打开，将文件指针指向文件末尾。如果文件不存在则尝试创建之。</td>
</tr>
<tr>
<td>&#8220;b&#8221;</td>
<td>和其它模式组合使用，以二进制方式打开文件，是推荐且默认的方式。</td>
</tr>
<tr>
<td>&#8220;a+&#8221;</td>
<td>和其它模式组合使用，以文本方式打开文件，只在Windows下有效，不推荐。</td>
</tr>
</tbody>
</table>
<h4>3、其它注意点</h4>
<ul>
<li>可以打开ftp和http协议的文件，也可以在php.ini关闭allow_url_fopen来禁止打开远程文件。</li>
<li>Linux打开文件必须注意该文件的读写权限问题。</li>
</ul>
<h3>二、读写文件</h3>
<p>打开文件后，可以用相关函数读取和写入数据。</p>
<h4>1、读取文件内容常用函数</h4>
<p><code>string fgets ( resource $handle [, int $length ] )</code>从文件指针开始读取一行，且最大长度不超过length，length默认为1024</p>
<p><code>string fgetss ( resource $handle [, int $length [, string $allowable_tags ]] )</code>同fgets，但会过滤除allowable_tags参数外的HTML和PHP的标签。</p>
<p><code>array fgetcsv ( resource $handle [, int $length [, string $delimiter = ',' [, string $enclosure = '"' [, string $escape='\\']]]] )</code>同fgets，但解析 CSV 字段，返回数组。</p>
<p><code>string fgetc ( resource $handle )</code>从文件指针开始，读取一个字符。</p>
<p><code>string fread ( resource $handle , int $length )</code>从文件指针开始，读取指定长度的内容。</p>
<p><code>int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )</code>打开文件并读取整个文件内容至输出缓存，然后关闭文件。</p>
<p><code>int fpassthru ( resource $handle )</code>读取文件指针当前位置到文件结束的数据至输出缓存。</p>
<p><code>array file ( string $filename [, int $flags = 0 [, resource $context ]] )</code>将全部文件内容读入一个数组中，每行内容成为一个数组元素。</p>
<p><code>string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen = -1 ]]]] )</code>将全部文件内容读入一个字符串中。</p>
<h4>2、写文件常用函数</h4>
<p><code>int fwrite ( resource $handle , string $string [, int $length ] )</code>从文件指针开始，写入最大长度为参数length的字符串内容。</p>
<p><code>int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )</code>打开文件（如果不存在则创建文件），写入data，关闭文件，会覆盖原文件内容，除非指定FILE_APPEND参数。</p>
<h4>3、文件指针操作函数</h4>
<p><code>bool rewind ( resource $handle )</code>将文件指针的位置倒回文件的开头。</p>
<p><code>int fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] )</code>将文件指针的位置移动到参数whence和offset 所指定的位置。</p>
<p><code>int ftell ( resource $handle )</code>返回文件指针的位置，注意PHP的文件指针是从0开始计数的。</p>
<p><code>bool feof ( resource $handle )</code>判断文件指针是否已经指向文件末尾。</p>
<h3>三、其它文件操作相关函数</h3>
<p><code>bool fclose ( resource $handle )</code>关闭打开的文件。</p>
<p><code>bool file_exists ( string $filename )</code>检查文件或目录是否存在。</p>
<p><code>int filesize ( string $filename )</code>返回文件大小。</p>
<p><code>bool unlink ( string $filename [, resource $context ] )</code>删除指定文件。</p>
<p><code>bool flock ( resource $handle , int $operation [, int &amp;$wouldblock ] )</code>锁定文件，在NFS和FAT等文件系统上无效。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/php-study-notes-storing-retrieving-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP学习笔记1 &#8211; 快速入门</title>
		<link>http://www.zhujun.org/web/php-study-notes-crash-course/</link>
		<comments>http://www.zhujun.org/web/php-study-notes-crash-course/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 07:48:38 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[学习笔记]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=232</guid>
		<description><![CDATA[PHP学习笔记之快速入门部分，主要包括PHP基本语法、变量、常量、作用域、变量和数据类型相关函数、条件语句，运算符及优先级的概述。]]></description>
			<content:encoded><![CDATA[<p>第一章，主要通过C/C++程序员的角度，对PHP基本语法、变量、常量、变量与常量的作用域、运算符、运算符优先级、变量与类型相关函数、条件与循环控制语句等内容进行快速入门（Crash Course）。<br />
<span id="more-232"></span></p>
<h3>一、基本语法</h3>
<h4>1、PHP Tags &#8211; 区分HTML和PHP代码</h4>
<p class="b4list">共有四种：</p>
<ul>
<li>XML格式（最常用，推荐）:<br />
<code>&lt;?php echo '&lt;p&gt;Order processed.&lt;/p&gt;'; ?&gt;</code></li>
<li>短格式（需要开启short_open_tag参数）：<br />
<code>&lt;? echo '&lt;p&gt;Order processed.&lt;/p&gt;'; ?&gt;</code></li>
<li>Script脚本格式：<br />
<code>&lt;script language='php'&gt; echo '&lt;p&gt;Order processed.&lt;/p&gt;'; &lt;/script&gt;</code></li>
<li>ASP格式 （需要开启asp_tags参数，不推荐）：<br />
<code>&lt;% echo '&lt;p&gt;Order processed.&lt;/p&gt;'; %&gt;</code></li>
</ul>
<h4>2、代码注释</h4>
<ul>
<li>多行注释：/*&#8230;*/</li>
<li>单行注释：//&#8230; 或 #&#8230;</li>
</ul>
<h3>二、变量</h3>
<h4>1、命名规则</h4>
<ul>
<li>PHP的变量必须以 $ 字符开始</li>
<li>变量名由字母、数字和下划线组成，且不能以数字作为开头字符</li>
<li>PHP的变量名是区分大小写的（case sensitive）</li>
<li>函数名不区分大小写，且函数可以和变量同名（不够make sense）</li>
</ul>
<h4>2、数据类型</h4>
<p>PHP的有整型（Integer）、浮点型（Float）、字符串型（String）、布尔型（Boolean）、数组（Array）和对象（Object）六种常见的数据类型和空值（NULL）以及资源变量（Resource）。</p>
<p>PHP是一种弱类型（weakly typed）或者称为动态类型（dynamically typed）的语言，所以声明变量的时候无需显式指定类型，编译器会根据变量的值来自行决定变量类型。另外，变量也无需显式声明即能使用。</p>
<h4>3、变量的变量</h4>
<p>即可变变量，是指通过获取一个变量的值做为另外一个变量的名称来操作变量。<br />
<code>$varname = 'tireqty';<br />
$$varname = 5;<br />
等同于<br />
$tireqty = 5;</code></p>
<h3>三、常量</h3>
<h4>1、定义常量</h4>
<p><code>define('USER_NAME', 'admin');<br />
define('IS_ADMIN', TRUE); </code></p>
<h4>2、数据类型</h4>
<p>常量只有整型（Integer）、浮点型（Float）、字符串型（String）、布尔型（Boolean）四种数据类型。</p>
<h4>3、使用常量</h4>
<p>直接使用，无需使用 $ 前缀。</p>
<h3>四、变量与常量的作用域</h3>
<ul>
<li>内建的超全局（superglobal）变量，如$_POST和$_GET，在任何页面都可见。</li>
<li>常量一旦声明就是全局可见的，包括在函数外和函数内。</li>
<li>脚本中声明的全局变量在该脚本中全局可见，但不包括函数内，除非在函数内使用global关键字声明该变量为全局变量。如：<br />
<code>&lt;?php<br />
$a = 1;<br />
$b = 2;<br />
function Sum()<br />
{<br />
global $a, $b;	//申明在函数内使用全局变量<br />
$b = $a + $b;	//全局变量的赋值影响主程序的$b<br />
}<br />
Sum();<br />
echo $b;	//输出结果为 3<br />
?&gt;</code></li>
<li>多数PHP变量都是局部变量，在其作用域外无法引用，并且超出其作用域时自动销毁。</li>
<li>静态变量在超出范围后不销毁，再次使用时保持前值。</li>
</ul>
<h3>五、运算符</h3>
<h4>1、数学运算符</h4>
<p>包括“+、-、*、/、%（取模）”，同C语言。</p>
<h4>2、字符串运算符</h4>
<p>包括“.”，用来连接两个字符串。</p>
<h4>3、赋值与复合赋值运算符</h4>
<p>包括“=、+=、-=、*=、/=、%=、.=”，基本上类似于C语言。</p>
<h4>4、自增与自减运算符</h4>
<p>包括“++、- -”，同C语言，只要明白$a++和++$a的区别即可，没必要搞清楚(i++)+(++i)+(i++)等于多少，这种问题实际开发中不会碰到，只会出现在谭浩强的习题集中。</p>
<h4>5、引用运算符</h4>
<p><code>$a = 5;<br />
$b = &amp;$a;<br />
$a = 7; // $a 和 $b 都为7<br />
</code></p>
<h4>6、比较运算符</h4>
<p>包括“==、===、!=、!==、&lt;&gt;、&lt;、&gt;、&lt;=、&gt;=”。<br />
需要注意的是&#8221;7&#8243; == 7，返回TRUE ，而 7=== &#8220;7&#8243;返回False，因为“===” 要求值和数据类型都相等。</p>
<h4>7、逻辑运算符</h4>
<p>包括“!、&#038;&#038;、||、and、or、xor”，基本上同C语言。</p>
<h4>8、位运算符</h4>
<p>包括“~、&#038;、|、^、>>、<<”，同C语言。</p>
<h4>9、其它运算符</h4>
<ul>
<li>“,、new、->、(?:)” 同C语言</li>
<li>“@” 错误控制运算符，将其放置在一个 PHP 表达式之前，忽略该表达式可能产生的任何错误信息。</li>
<li>“` `” 执行运算符，注意这不是单引号，作用是尝试执行反引号中的命令。</li>
</ul>
<h3>六、运算符优先级</h3>
<p>类似于C语言，略，不必刻意记忆，不确定的可以多加点括号。</p>
<h3>七、变量与数据类型相关函数</h3>
<ul>
<li>string gettype(mixed var); //返回变量的数据类型</li>
<li>bool settype(mixed var, string type); //设置变量类型</li>
<li>bool is_array(mixed var); //判断变量是否是数组型</li>
<li>bool  is_long(mixed var); / is_int() / is_integer() //判断变量是否是整型</li>
<li>bool is_double(mixed var); / is_float() / is_real() //判断变量是否是浮点型</li>
<li>bool is_scalar(mixed var); //判断变量是否是布尔型、整型、浮点型或字符串型</li>
<li>bool is_callable(mixed var); //判断变量是否是一个函数名</li>
<li>类似的还有 is_string()、is_bool()、is_object()、is_resource()、is_null() 等</li>
<li>bool isset ( mixed var [, mixed var [, ...]]); //判断变量是否已定义</li>
<li>void unset ( mixed var [, mixed var [, ...]]); //销毁指定的变量</li>
<li>bool empty ( mixed var [, mixed var [, ...]]); //检查变量的值是否为空或0</li>
</ul>
<h3>八、条件与循环控制语句</h3>
<ul>
<li>if/elseif/else</li>
<li>switch</li>
<li>while/do&#8230;while</li>
<li>for/foreach</li>
<li>break</li>
</ul>
<p>上述条件及循环控制语句均类似于其它编程语言，略。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/php-study-notes-crash-course/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHP学习笔记</title>
		<link>http://www.zhujun.org/web/php-study-notes/</link>
		<comments>http://www.zhujun.org/web/php-study-notes/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 08:30:53 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[学习笔记]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=221</guid>
		<description><![CDATA[主要包括作者以《PHP and MySQL Web Development 4th Edition》为参考书，学习PHP所记笔记的前言部分和全部PHP学习笔记的目录。]]></description>
			<content:encoded><![CDATA[<p>对于PHP，一直处于能看、能改、不能写的状态，世界杯结束以后，打算系统地学习一下PHP。<br />
参考书是 Luke Welling 和 Laura Thomson 编写的《PHP and MySQL Web Development 4th Edition》，此书被称为是PHP圣经，国内翻译的中文版叫做《PHP与MySQL WEB开发》，不过技术书籍还是看原版的好，表述清晰，还能顺便巩固一下英文。</p>
<p>前言部分，照例简单介绍了什么是PHP、MySQL，为什么要使用PHP/MySQL，以及它们的优点等等，迅速略过。</p>
<p class="b4list">紧接着是PHP5的新特性：</p>
<ul>
<li>更好的面向对象支持</li>
<li>更好的错误/异常处理</li>
<li>内置的SimpleXML来读取XML数据</li>
</ul>
<p>和PHP 5.3将要支持的新特性（成书于PHP 5.2时代），比如，命名空间namespaces （很重要）等等。<span id="more-221"></span></p>
<h3>PHP学习笔记目录</h3>
<ol>
<li><a href="/web/php-study-notes-crash-course/">PHP速成</a></li>
<li><a href="/web/php-study-notes-storing-retrieving-data/">用文件来存取数据</a></li>
<li>使用数组</li>
<li>字符串处理和正则表达式</li>
<li>使用函数以复用代码</li>
<li>面向对象的PHP</li>
<li>错误和异常处理</li>
<li>&#8230;&#8230;</li>
<li>待添加</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/php-study-notes/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Google首页PacMan吃豆子游戏源代码</title>
		<link>http://www.zhujun.org/web/google-pac-man-source-code/</link>
		<comments>http://www.zhujun.org/web/google-pac-man-source-code/#comments</comments>
		<pubDate>Sat, 22 May 2010 06:28:17 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[PacMan]]></category>
		<category><![CDATA[吃豆子]]></category>
		<category><![CDATA[源代码]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=195</guid>
		<description><![CDATA[提供了朱俊从Google首页提取的Pac-Man（吃豆子）游戏的源代码，包括在线试玩和JavaScript源代码打包下载。]]></description>
			<content:encoded><![CDATA[<p>为了纪念NAMCO BANDAI 公司的Pac-Man（吃豆子）游戏诞生30周年，Google推出了一个特别的Doodle，首页的Logo可以直接作为一个Pac-Man游戏玩，支持双人同时游戏，支持键盘鼠标操作，总共有200多关。</p>
<p>花了几个小时抠出来了吃豆子游戏的源代码，去掉了Google首页无关的代码。<br />
<del datetime="2010-05-22T07:48:13+00:00">源代码中的pacman10-hp-sound.swf并不发声，所以去掉了，暂时还不知道Google是怎么播放音效的。</del><br />
游戏音效已经加上了，原来是我在本地调试时，调用本地Flash有安全问题，没有出声，所以误会google了。</p>
<p>下面是<a href="http://www.zhujun.org/">朱俊</a>为研究及收藏而提供的在线演示，Google保留所有权利。<br />
点击Insert Coin开始游戏，点击两次则是双人游戏，在 IE / FireFox / Chrome 浏览器下均测试通过。</p>
<h4>Pac-Man游戏在线演示：</h4>
<p><iframe src="/wp-content/uploads/pacman/pacman.html" height="340px" width="660px" style="overflow:hidden" frameborder="0" ></iframe></p>
<h4>Pac-Man源代码打包下载：</h4>
<p><a href="/wp-content/uploads/pacman/pacman.zip" >Google吃豆子游戏JavaScript源代码</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/google-pac-man-source-code/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>如何缩短网站域名的DNS解析时间</title>
		<link>http://www.zhujun.org/web/how-to-improve-dns-resolution-time/</link>
		<comments>http://www.zhujun.org/web/how-to-improve-dns-resolution-time/#comments</comments>
		<pubDate>Wed, 05 May 2010 15:04:16 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[域名解析]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=175</guid>
		<description><![CDATA[介绍了DNS(Domain Name System)的相关知识，讲述了普通站长缩短网站域名的DNS解析时间的方法,来提高访客打开网站的速度。]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/2010/04/dns-resolution-time.gif" alt="DNS 解析时间" /></p>
<p class="b4list">如上图所示，普通用户打开一个网页的时间主要由四部分组成：</p>
<ol>
<li>网站域名通过 DNS 服务器解析到IP地址的时间</li>
<li>通过IP地址和服务器建立HTTP连接的时间</li>
<li>服务器接受连接请求后进行计算的时间</li>
<li>网页内容通过HTTP协议传输到用户的时间</li>
</ol>
<p>在上图中，DNS域名解析时间占了整个访问时间的1/3强，严重拖慢了用户打开网页的速度。</p>
<p>作为一个站长，一定希望自己网站的打开速度足够快，以免访问者因为失去耐心而关闭浏览器。<br />
本文将介绍如何缩短网站域名的DNS解析时间，来让访问者更快的打开你的网站。<br />
<span id="more-175"></span></p>
<h3>一、域名的DNS解析过程</h3>
<p class="b4list">将一个域名解析成IP地址，主要由以下几个步骤：</p>
<ol>
<li>将域名解析请求发送给本地的域名服务器 (DNS Server) 。</li>
<li>域名服务器 (DNS Server) 收到请求后,先查询本地缓存,如果有该域名的纪录项,则直接返回目标IP地址。</li>
<li>如果本地缓存中没有,则直接发送请求给根域名服务器 (Root Name Server) 。<br />
根域名服务器 (Root Name Server) 返回给本地域名服务器 (DNS Server) 一个所查询域的主域名服务器 (gTLD Server) 地址。</li>
<li>本地域名服务器 (DNS Server) 再向上一步返回的 TLD 服务器发送请求。<br />
接受请求的 TLD 服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器 (Name Server) 的地址。</li>
<li>正常情况下 Name Server 会有相应的记录，并返回给 DNS Server 。</li>
<li>本地 DNS Server 根据域名的TTL值，把返回的结果保存到缓存,同时将解析结果返回给客户机。</li>
</ol>
<h3>二、缩短域名的DNS解析时间</h3>
<p>知道了域名的DNS解析过程，就可以采取相应的措施，缩短解析时间，我们所能影响和选择的方面主要包括缓存、本地DNS Server和域名的Name Server。</p>
<h4>1、增加域名的缓存命中率</h4>
<p>如果访问者访问网站时，域名在本机或当地的DNS Server缓存中，则可以大大加快该域名的解析时间。</p>
<p class="b4list">以下方法可以增加域名在DNS Server中的缓存命中率：</p>
<ul>
<li>提高网站的访问量。<br />
网站的访问量越高，意味着网站域名被请求解析的次数越多，则该域名被DNS Server缓存的几率就越大。</li>
<li>增加域名A记录和CName的TTL (Time-To-Live) 值。<br />
TTL就是一条域名解析记录在DNS Server中的存留时间和过期时间。增大TTL值可以让DNS Server缓存该域名更长时间，增加缓存的命中率。TTL一般默认为一小时，可以根据实际情况设为一天甚至一周以上。<br />
当然，如果你域名的IP经常变化，则TTL不应过大，否则各地的DNS Server会暂时无法获得新的正确的IP地址。</li>
</ul>
<p>下图是两个网站采用相同服务器、相同IP、相同网页内容，不同的TTL值在同一天内的监控结果。<br />
<img src="/wp-content/uploads/2010/04/ttl-1-hour.gif" alt="域名TTL为1小时" /></p>
<div style="text-align: center;">图一：TTL设为一小时</div>
<p><img src="/wp-content/uploads/2010/04/ttl-1-week.gif" alt="域名TTL为1周" /></p>
<div style="text-align: center;">图二：TTL设为一周</div>
<p>可以注意到，图二中域名DNS解析所花的时间可以忽略不计，这就是域名A记录TTL时间长，增加了缓存的命中率带来的加速效果。</p>
<h4>2、选择更快的本地DNS Server</h4>
<p>一般而言，我们无法决定用户使用何种DNS Server，大部分初级用户使用的是本地ISP自动获取的DNS Server，部分用户则使用第三方DNS Server比如Open DNS或者Google DNS。</p>
<p>不过你可以建议你的用户使用Google DNS (8.8.8.8 和8.8.4.4)，该DNS Server会比电信或网通自动获取的DNS Server快许多。</p>
<h4>3、选择更快的域名Name Server</h4>
<p>在域名的whois信息中，我们可以看到域名的Name Server，不同的Name Server有不同的域名管理面板用来管理A记录和CName等信息。<br />
由于一般的站长无法在全世界建立Name Server的镜像，所以我们只能选择离目标访客物理距离近的Name Server以加快访客的解析速度。<br />
比如你的网站主要浏览量来自中国，则你的Name Server最好也在中国境内，最好是电信和网通双线的。如果你的网站主要浏览量来自美国，则你可以用Godaddy的Name Server。</p>
<p>不过近年来宫信步势大，大量域名都转移至了国外，而国内缺少免费、稳定的第三方Name Server，使得这个问题很难解决。Godaddy的免费Name Server，国内解析起来实在很慢，也许我们可以期待无所不能的Google将来提供免费的Name Server给我们。</p>
<h3>三、结论</h3>
<p>本文通过理解域名的DNS解析过程，选择我们所能影响的因素，采取对应且免费的措施来加快域名的DNS解析时间，使得访客有更快的打开速度和更好的用户体验。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/how-to-improve-dns-resolution-time/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>把网站从ASP/ASPX迁徙到PHP了</title>
		<link>http://www.zhujun.org/web/migrate-aspx-to-php/</link>
		<comments>http://www.zhujun.org/web/migrate-aspx-to-php/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 10:42:35 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[LNMP]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=150</guid>
		<description><![CDATA[讲述了将网站从Windows+IIS+MSSQL+ASP/ASPX迁徙到LNMP(Linux+Nginx+MySQL+PHP)平台的原因、过程、时间成本和带来速度提升的结果。]]></description>
			<content:encoded><![CDATA[<p>好久没有更新博客，这个月一直很忙，主要把手中几个网站从Windows IIS平台迁徙到了Linux Nginx下面。由于Linux对asp和aspx的支持不好，虽然有MONO，但Access和MSSQL数据库还是无法支持，所以把asp和aspx的网站全部换成php的了。</p>
<p>通过最近半个月左右的观察，感觉LNMP(Linux+Nginx+MySQL+PHP)平台没有让我失望，付出的劳动应该是值得的。<br />
<span id="more-150"></span></p>
<h3>为什么要从Windows+IIS+ASP/ASPX+MSSQL换到LNMP</h3>
<ul>
<li>成本<br />自从被宫信步赶到国外以后，就一直承受着昂贵的Windows License Fee，每个月十几至几十美元，无法一次性买断。虽然我的皮包公司 &#8211; <a href="http://www.skyker.com" rel="external">步天软件</a>是MicroSoft BizSpark成员，可以免费使用微软几乎所有产品，但这不代表我能把我的License Key交给美国IDC使用，大部分正规的IDC都会拒绝用户提供的Key，因为微软貌似有个规定KEY和硬件的提供人必须是一个。<br />换到Linux可以节省运营成本，谁叫俺是穷人呢。</li>
<li>稳定<br />之前连连看的论坛是ASP.Net的Discuz论坛，经常抛异常，甚至导致w3wp进程死掉。换到PHP的Discuz 7.2后，论坛表现的很稳定，而且速度也有所提升。<br />7、8年前ASP.Net 1.1刚出来的时候，我觉得.Net只要5、6年时间就可以一统江湖，但现在无论是桌面开发还是网络开发，.Net的表现都不尽如人意。<br />曾经吹牛说Vista是基于.Net的操作系统，结果非常莫名其妙，UAC更是失败中的失败，APP不准写自身文件夹，非要写系统的用户文件夹，难道这就是多用户？现在又把Vista 6.0的内核升到6.1，就当作Win7来卖，实在不明白微软那么多工程师在搞什么。</li>
<li>方便<br />Linux管理起来比Windows方便多了，IIS的图形界面使用起来非常低效，rewrite功能不行，需要外置模块或使用ASP.Net的rewrite。<br />MS SQL Server 2000的备份功能很弱，经常因为用户权限的问题导致Discuz论坛无法使用，比如恼人的“对象名 &#8216;dnt_templates&#8217; 无效”。<br />而Linux无论使用crontab进行自动备份还是使用各种工具比如PHPMyAdmin手动备份都很方便。</li>
</ul>
<h3>迁徙成本</h3>
<p>Discuz的.Net论坛有升级包可以直接转换到PHP的版本，虽然有些帖子需要重新编辑，大部分附件地址有问题，需要重新修改，但时间成本不超过2天。</p>
<p>另一个人工智能网站是基于ASP的动易CMS，由于年代太久远了，无法直接升级，于是使用的DedeCMS做的采集，大部分内容进行了重新编辑，加上界面模板修改，大约花了10多天时间。</p>
<p>最后是自己用ASP.NET 2.0编写的公司网站，花了3、4天重新设计和编写，还没完全完成。原先ASP.NET生成的html代码比较冗余，一大串ViewState的编码，经常自带很长的id名，不利于SEO，换到PHP后好多了，也通过了W3C的验证。</p>
<h3>迁徙结果</h3>
<h4>网站响应速度有所提升</h4>
<p>下图是监控宝提供的连连看网站响应时间变化图，约在下午3点，网站由Win2003/IIS迁移到了Debian5/Nginx。<br />
<img src="/wp-content/uploads/2010/04/iis-nginx.png" alt="IIS Nginx htm速度比较" /><br />
由于LLK.cn的网页基于shtml制作，没有用到动态技术，该图较好地反应两种web server在性能上的区别。<br />
可以看到，IIS服务器在0点和10点分别有两次服务器计算，消耗了较长时间，反应出IIS在建立连接上面比较慢。<br />
另外，切换到Nginx后，传输时间也相应减少，不过这可能仅仅是因为网络原因。</p>
<h4>页面执行速度有所提升</h4>
<p>连连看论坛从ASP.NET换到PHP后，页面执行时间方面从0.0x 降到了0.00x ，当然后者是用了eaccelerator编译PHP代码的，可ASP.NET也会编译啊。</p>
<p>人工智能网从asp换成php后，提升效果则更为明显，看图即知，都无需指明是几点切换的，这是两种完全没有可比性的技术。<br />
<img src="/wp-content/uploads/2010/04/iis-asp-nginx-php.png" alt="IIS ASP和Nginx PHP速度比较" /></p>
<h3>结论</h3>
<p>这次Web Server从Windows/IIS换到Linux/Nginx，网站从ASP/ASPX换到PHP，带来了性能上的提升和管理上的方便。<br />
从监控宝的监控视图上可以看到DNS域名解析时间不太稳定，0-500ms都有，联通（网通）视图中甚至会超过1000ms，严重影响用户打开网页的速度，下一篇将讲述<a href="http://www.zhujun.org/web/how-to-improve-dns-resolution-time/" >如何缩短域名的DNS解析时间来加快网页打开速度</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/migrate-aspx-to-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Nginx下绑定自己签发的免费SSL数字安全证书</title>
		<link>http://www.zhujun.org/web/nginx-selfsign-ssl-cert/</link>
		<comments>http://www.zhujun.org/web/nginx-selfsign-ssl-cert/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 07:58:27 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[Nginx配置]]></category>
		<category><![CDATA[SSL]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=131</guid>
		<description><![CDATA[讲述了Debian5系统，OpenSSL模块，Nginx做Web Server的环境下，自己签发免费的SSL数字证书，配置Nginx，使用HTTPS协议访问网站的步骤。]]></description>
			<content:encoded><![CDATA[<p>由于HTTP协议明文传输数据，使得嗅探无处不在，因此对某些网站如购物交易类、注册登陆类等，需要开启HTTPS协议来增加安全性，保证用户的密码不被盗取和嗅探。</p>
<p>HTTPS需要SSL数字安全证书的支持，一般找浏览器信任的CA机构签发数字证书都是要收费的，价格一般在13美元/年至50美元/年不等。（除了StartSSL和PositiveSSL）</p>
<p>如果证书只是给自己用的，防止在线管理时密码被窃听，则可以自行颁发免费的SSL数字安全证书。<br />
Debian5 + OpenSSL + Nginx环境步骤如下：<span id="more-131"></span></p>
<h3>一、使用OpenSSL生成SSL数字安全证书</h3>
<p><code class="command">openssl genrsa -out privkey.pem 2048<br />
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095<br />
</code><br />
上述命令中第一步是生成用户证书 RSA 密钥对，且不带密码。<br />
第二步是证书请求生成和自签名，此时会要求输入参数，随便填，但Common Name必须填即将使用HTTPS的站点名称，比如：*.yourdomain.com 。</p>
<h3>二、确保Nginx支持OpenSSL模块</h3>
<p>Nginx默认是不支持SSL的，需要重新配置和编译，命令如下：<br />
<code class="command">wget http://nginx.org/download/nginx-0.7.65.tar.gz<br />
tar zxvf nginx-0.7.65.tar.gz<br />
cd /root/nginx-0.7.65<br />
./configure --with-http_stub_status_module --with-http_ssl_module<br />
make<br />
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old<br />
cp ./objs/nginx /usr/local/nginx/sbin/nginx<br />
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`<br />
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`<br />
</code><br />
上述命令其实也是一次标准的Nginx升级操作，其中的目录需要用户根据具体情况自行更改。<br />
另外，用户也可以在编译前注释掉 auto/cc/gcc 中的 CFLAGS=&#8221;$CFLAGS -g&#8221; 这行，使Nginx不以Debug模式编译，节约文件和内存占用、提高速度。</p>
<h3>三、修改Nginx配置</h3>
<p>修改nginx.conf中相应的server段：<br />
<code>	server<br />
	{<br />
		listen 443;<br />
		ssl on;<br />
		ssl_certificate /etc/ssl/cacert.pem;<br />
		ssl_certificate_key /etc/ssl/privkey.pem;<br />
		server_name www.yourdoamin.com;<br />
		index index.html index.htm index.php;<br />
		root  /home/wwwroot/yourdomain;<br />
		......<br />
		......<br />
	}<br />
</code><br />
其中SSL数字证书路径和域名路径也应根据实际情况修改。</p>
<h3>四、重启Nginx</h3>
<p>上传nginx.conf后，测试配置文件是否正确，并重启Nginx：<br />
<code class="command">/usr/local/nginx/sbin/nginx -t<br />
kill -HUP `cat /usr/local/nginx/logs/nginx.pid`<br />
</code></p>
<h3>五、使用HTTPS协议访问网站</h3>
<p>键入https://www.yourdomain.com 会出现警告框：<br />
<img src="/wp-content/uploads/2010/03/ssl-cert-security-warning.png" alt="浏览器数字证书安全警报" /><br />
由于是自己使用，点击查看证书-安装证书，下次就不会再弹出该警报框。</p>
<p>至此，你就可以使用HTTPS协议安全的访问网站，不用担心用户名和密码会在传输过程中被嗅探、盗取。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/nginx-selfsign-ssl-cert/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.250 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-09-05 22:03:13 -->
