<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>PHP Blog</title>
	
	<link>http://phpstone.com</link>
	<description>专注于 PHP、MySQL 和 FreeBSD</description>
	<lastBuildDate>Tue, 10 Nov 2009 05:02:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/phpstone" type="application/rss+xml" /><feedburner:emailServiceId>phpstone</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>为PHP5安装PEAR</title>
		<link>http://feedproxy.google.com/~r/phpstone/~3/FpCPPO58zII/</link>
		<comments>http://phpstone.com/install-pear-for-php5/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 05:00:41 +0000</pubDate>
		<dc:creator>frePerl</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[pear]]></category>

		<guid isPermaLink="false">http://phpstone.com/?p=425</guid>
		<description><![CDATA[最近在学习PHP的PEAR（PHP Extension and Application Repository PHP扩展与应用库），测试软件我都首先在FreeBSD上安装，因为早已习惯与其软件维护的简便。
#cd /usr/ports/devel/pear
#make install clean
执行安装后提示当前PHP没有运行在命令行模式下，无法安装
#cd /usr/ports/lang/php5
#make config 
将PHP配置选项的CLI选择上，CLI是PHP的命令行模式，将此选项编译允许PHP使用此模式，才能安装PEAR。
此时可以执行重新安装命令 #make reinstall clean，不巧此时在服务器上的PHP版本需要升级，因此我直接执行了 #portupgrade php5，完成升级后重新进入pear的ports目录安装。
安装完成后，执行 #pear list 可查询默认安装的PEAR包，执行 #pear install pkgname 可以安装所需PEAR包。
Mac OS X 下我使用的是MAMP，里面默认安装了PEAR，但是需要使用 pear 命令的话需要定位到MAMP的安装目录，或者配置用户的bash环境。
Windows下则是默认没有安装PEAR，可在PHP目录下执行go-pear.bat进行安装配置，或者使用官方提供的go-pear.php文件使用web管理方式（Webbased PEAR Package Manager）进行安装，安装完成后可以访问管理目录进行PEAR的包管理、安装等，较为直观。
]]></description>
			<content:encoded><![CDATA[<p>最近在学习PHP的PEAR（PHP Extension and Application Repository PHP扩展与应用库），测试软件我都首先在FreeBSD上安装，因为早已习惯与其软件维护的简便。</p>
<p>#cd /usr/ports/devel/pear<br />
#make install clean</p>
<p>执行安装后提示当前PHP没有运行在命令行模式下，无法安装</p>
<p>#cd /usr/ports/lang/php5<br />
#make config <span id="more-425"></span></p>
<p>将PHP配置选项的CLI选择上，CLI是PHP的命令行模式，将此选项编译允许PHP使用此模式，才能安装PEAR。<br />
此时可以执行重新安装命令 #make reinstall clean，不巧此时在服务器上的PHP版本需要升级，因此我直接执行了 #portupgrade php5，完成升级后重新进入pear的ports目录安装。</p>
<p>安装完成后，执行 #pear list 可查询默认安装的PEAR包，执行 #pear install pkgname 可以安装所需PEAR包。</p>
<p>Mac OS X 下我使用的是MAMP，里面默认安装了PEAR，但是需要使用 pear 命令的话需要定位到MAMP的安装目录，或者配置用户的bash环境。</p>
<p>Windows下则是默认没有安装PEAR，可在PHP目录下执行go-pear.bat进行安装配置，或者使用官方提供的go-pear.php文件使用web管理方式（Webbased PEAR Package Manager）进行安装，安装完成后可以访问管理目录进行PEAR的包管理、安装等，较为直观。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/phpstone?a=FpCPPO58zII:HsUk2wINBf8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/phpstone?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=FpCPPO58zII:HsUk2wINBf8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/phpstone?i=FpCPPO58zII:HsUk2wINBf8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=FpCPPO58zII:HsUk2wINBf8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/phpstone?i=FpCPPO58zII:HsUk2wINBf8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=FpCPPO58zII:HsUk2wINBf8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/phpstone?i=FpCPPO58zII:HsUk2wINBf8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=FpCPPO58zII:HsUk2wINBf8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/phpstone?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://phpstone.com/install-pear-for-php5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpstone.com/install-pear-for-php5/</feedburner:origLink></item>
		<item>
		<title>网络设备故障拾遗</title>
		<link>http://feedproxy.google.com/~r/phpstone/~3/ehX8ZVj016o/</link>
		<comments>http://phpstone.com/network-equipment-failure-to-add/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 07:57:53 +0000</pubDate>
		<dc:creator>frePerl</dc:creator>
				<category><![CDATA[说点什么]]></category>
		<category><![CDATA[Note]]></category>

		<guid isPermaLink="false">http://phpstone.com/?p=371</guid>
		<description><![CDATA[最近碰上一个交换机坏掉和一个路由器坏掉，可是折腾了我一把，把处理过程记录一下。
先是部分电脑连接到打印服务器打印时整个office文档程序死掉，检查发现这些客户端无法通过网络正常连接到打印服务器，原本以为是网线之类的问题，但是发现这些电脑的IM工具、Web应用也正常，然后ping测试到打印服务器也没有丢包现象。由于打印服务器接在一台交换机上，于是将其直连到路由器的端口，部分客户端的打印问题解决了，但是还有一部分故障依旧。将故障客户网络端口换到其他交换机，于是故障得到解决，从而断定交换机故障，替换交换机后恢复正常。
还没有过多久，路由器又出了状况。首先是公司网络异常，主要是连接外网的网络应用均异常，ping 本市的电信数据中心（61.150.4.238）丢包，开始还以为是外部光纤问题，将笔记本直连到光猫测试，检查无异后，检查内部网络ping路由地址也丢包，从而猜测路由器故障。尝试重启路由器几次未果。联系路由器厂商并说明现象后建议尝试更改网卡属性为10M半双工，进行ping路由器测试，出现正常后将路由所以局域网端口和广域网端口全部改为10M半双工，网络连接开始正常。
而后联系厂家发送备用路由，原路由返回修理。
后记：网络故障的排除需要耐心细致的检查和有条理的分析，另外需要一点点扎实的网络基础。到面对实际问题，会发现自己要学的其实还很多。
]]></description>
			<content:encoded><![CDATA[<p>最近碰上一个交换机坏掉和一个路由器坏掉，可是折腾了我一把，把处理过程记录一下。</p>
<p>先是部分电脑连接到打印服务器打印时整个office文档程序死掉，检查发现这些客户端无法通过网络正常连接到打印服务器，原本以为是网线之类的问题，但是发现这些电脑的IM工具、Web应用也正常，然后ping测试到打印服务器也没有丢包现象。由于打印服务器接在一台交换机上，于是将其直连到路由器的端口，部分客户端的打印问题解决了，但是还有一部分故障依旧。将故障客户网络端口换到其他交换机，于是故障得到解决，从而断定交换机故障，替换交换机后恢复正常。</p>
<p>还没有过多久，路由器又出了状况。首先是公司网络异常，主要是连接外网的网络应用均异常，ping 本市的电信数据中心（61.150.4.238）丢包，开始还以为是外部光纤问题，将笔记本直连到光猫测试，检查无异后，检查内部网络ping路由地址也丢包，从而猜测路由器故障。尝试重启路由器几次未果。联系路由器厂商并说明现象后建议尝试更改网卡属性为10M半双工，进行ping路由器测试，出现正常后将路由所以局域网端口和广域网端口全部改为10M半双工，网络连接开始正常。</p>
<p>而后联系厂家发送备用路由，原路由返回修理。</p>
<p>后记：网络故障的排除需要耐心细致的检查和有条理的分析，另外需要一点点扎实的网络基础。到面对实际问题，会发现自己要学的其实还很多。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/phpstone?a=ehX8ZVj016o:ixCrzwM-4V0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/phpstone?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=ehX8ZVj016o:ixCrzwM-4V0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/phpstone?i=ehX8ZVj016o:ixCrzwM-4V0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=ehX8ZVj016o:ixCrzwM-4V0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/phpstone?i=ehX8ZVj016o:ixCrzwM-4V0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=ehX8ZVj016o:ixCrzwM-4V0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/phpstone?i=ehX8ZVj016o:ixCrzwM-4V0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=ehX8ZVj016o:ixCrzwM-4V0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/phpstone?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://phpstone.com/network-equipment-failure-to-add/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpstone.com/network-equipment-failure-to-add/</feedburner:origLink></item>
		<item>
		<title>FreeBSD 次版本升级笔记</title>
		<link>http://feedproxy.google.com/~r/phpstone/~3/neUsDGFtLrQ/</link>
		<comments>http://phpstone.com/freebsd-minor-version-upgrades-note/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 08:44:45 +0000</pubDate>
		<dc:creator>frePerl</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Note]]></category>

		<guid isPermaLink="false">http://phpstone.com/?p=369</guid>
		<description><![CDATA[由于学习的需求，我在一台FreeBSD服务器上做着各种的尝试。之前FreeBSD的版本升级都需要重新编译内核源代码，那是一个我认为并不繁琐而且很有乐趣的过程，但是最大的缺陷在于最终的更新文件需要跑到机房在服务器连接的显示器跟前进行，无法通过SSH远程来完成。自从有了freebsd-update这个实用的工具之后，我就可以在自己的电脑跟前完成这些操作了。
FreeBSD最新的手册（适用于6.4-RELEASE 和 FreeBSD 7.2-RELEASE）第24章 更新与升级 FreeBSD，已经给出了关于使用freebsd-update进行升级的指导。
记得 7.0-RELEASE 刚发布时，官方的文档说明了freebsd-update不适用于修改过内核的系统升级，这台服务器的系统是从6.1-RELEASE一路编译升级到7.0-RELEASE，修改过内核，为了使用freebsd-update工具，我又使用GENERIC（默认）内核重新编译了一次系统，从7.0-RELEASE开始的安全更新全部是使用的freebsd-update工具进行。7.1-RELEASE发布时，我也尝试过”#freebsd-update -r 7.1-RELEASE upgrade“,一直是到fetch第二部分文件时失败，一直没有找到原因。到09年8月份，我试着再次更新。
我更喜欢用portsnap来更新ports，并且设定好了root用户cron：
0       2       *       *       *       portsnap -I cron update &#038;&#038; pkg_version &#8211; vIL=
每两小时更新一次，但操作升级系统前我还是执行了一次：
#portsnap fetch update
接着执行系统的更新：
#freebsd-update- [...]]]></description>
			<content:encoded><![CDATA[<p>由于学习的需求，我在一台FreeBSD服务器上做着各种的尝试。之前FreeBSD的版本升级都需要重新编译内核源代码，那是一个我认为并不繁琐而且很有乐趣的过程，但是最大的缺陷在于最终的更新文件需要跑到机房在服务器连接的显示器跟前进行，无法通过SSH远程来完成。自从有了freebsd-update这个实用的工具之后，我就可以在自己的电脑跟前完成这些操作了。</p>
<p>FreeBSD最新的手册（适用于6.4-RELEASE 和 FreeBSD 7.2-RELEASE）第24章 更新与升级 FreeBSD，已经给出了关于使用freebsd-update进行升级的指导。<span id="more-369"></span></p>
<p>记得 7.0-RELEASE 刚发布时，官方的文档说明了freebsd-update不适用于修改过内核的系统升级，这台服务器的系统是从6.1-RELEASE一路编译升级到7.0-RELEASE，修改过内核，为了使用freebsd-update工具，我又使用GENERIC（默认）内核重新编译了一次系统，从7.0-RELEASE开始的安全更新全部是使用的freebsd-update工具进行。7.1-RELEASE发布时，我也尝试过”#freebsd-update -r 7.1-RELEASE upgrade“,一直是到fetch第二部分文件时失败，一直没有找到原因。到09年8月份，我试着再次更新。</p>
<p>我更喜欢用portsnap来更新ports，并且设定好了root用户cron：</p>
<p>0       2       *       *       *       portsnap -I cron update &#038;&#038; pkg_version &#8211; vIL=</p>
<p>每两小时更新一次，但操作升级系统前我还是执行了一次：<br />
#portsnap fetch update</p>
<p>接着执行系统的更新：<br />
#freebsd-update- r 7.2-RELEASE upgrade</p>
<p>对于定制过内核的系统，会收到类似下面的警告：</p>
<blockquote><p>WARNING: This system is running a &#8220;MYKERNEL&#8221; kernel, which is not a<br />
kernel configuration distributed as part of FreeBSD 7.0-RELEASE.<br />
This kernel will not be updated: you MUST update the kernel manually<br />
before running &#8220;/usr/sbin/freebsd-update install&#8221;</p></blockquote>
<p>看来我当初做的使用默认内核重新编译系统内核并没有成功地让系统”认为“我使用的是默认内核。<br />
暂时安全地无视这个警告。 更新的 GENERIC 内核将在升级过程的中间步骤中使用。</p>
<p>在下载完针对本地系统的补丁之后， 这些补丁会被应用到系统上。这个过程需要消耗的时间取决于机器的速度和其负载。这个过程中将会对配置文件所做的变动进行合并 ── 这一部分需要用户的参与，文件可能会自动合并， 屏幕上也可能会给出一个编辑器， 用于手工完成合并操作。在处理过程中，合并成功的结果会显示给用户。 失败或被忽略的合并， 则会导致这一过程的终止。 </p>
<p>The following file could not be merged automatically: /etc/mail/freebsd.cf<br />
Press Enter to edit this file in vi and resolve the conflicts<br />
manually&#8230;</p>
<p>看到这个消息后直接进入了vi编辑器，我并不知道要如何修改这些文件，于是直接保存退出了。</p>
<p>一旦这个步骤完成后，使用如下的命令将升级后的文件安装到磁盘上。<br />
# freebsd-update install</p>
<p>内核和内核模块会首先被打上补丁。 此时必须重新启动计算机。如果您使用的是定制的内核， 请使用 nextboot 命令来将下一次用于引导系统的内核 /boot/GENERIC (它会被更新)：<br />
# nextboot -k GENERIC</p>
<p>警告: 在使用 GENERIC 内核启动之前，请确信它包含了用于引导系统所需的全部驱动程序 (如果您是在远程进行升级操作，还应确信网卡驱动也是存在的)。 特别要注意的情形是，如果之前的内核中静态联编了通常以内核模块形式存在的驱动程序， 一定要通过 /boot/loader.conf 机制来将这些模块加载到 GENERIC 内核的基础上。 此外， 您可能也希望临时取消不重要的服务、磁盘和网络挂载等等， 直到升级过程完成为止。</p>
<p>现在可以用更新后的内核引导系统了：<br />
# shutdown -r now</p>
<p>　　在系统重新上线后，需要再次运行 freebsd-update。升级的状态被保存着，这样 freebsd-update 就无需重头开始，但是会删除所有旧的共享库和目标文件。 执行如下命令继续这个阶段的升级：<br />
# freebsd-update install</p>
<p>对于次版本升级，如7.0-RELEASE升级到7.2-RELEASE，是不需要重新编译和安装第三方软件。但我出于试验的目的，还是进行了更新：</p>
<p># portupgrade -f ruby<br />
# rm /var/db/pkg/pkgdb.db<br />
# portupgrade -f ruby18-bdb<br />
# rm /var/db/pkg/pkgdb.db /usr/ports/INDEX-*.db<br />
# portupgrade -af</p>
<p>此过程不可以中断，但是我之前也没有安装screen程序，执行”nohup portupgrade -af &#038;“下班，回家后查看并无法用jobs调出，已经终止了程序，不知道是什么原因。只好再次执行”portupgrade -af“。</p>
<p>　一旦这个完成了以后，再最后一次运行 freebsd-update 来结束升级过程。<br />
# freebsd-update install</p>
<p>　”如果您临时用过 GENERIC 内核来引导系统，现在是按照通常的方法重新联编并安装新的定制内核的时候了。“</p>
<p>由于手册上没有详细说明定制内核该如何安装，因此我按手册的操作步骤来执行。</p>
<p>”重新启动机器进入新版本的 FreeBSD 升级过程至此就完成了。“</p>
<p>重启后发发现版本号还是 FreeBSD 7.0-RELEASE p7。无奈之余我从”freebsd-update -r 7.2-RELEASE upgrade“开始重新执行了一次，到”# nextboot -k GENERIC“的步骤直接使用”shutdown -r now“重启服务器，接着执行下面的步骤，这才得到了下面的结果：</p>
<p>> uname -a<br />
FreeBSD stone.com 7.2-RELEASE-p2 FreeBSD 7.2-RELEASE-p2 #0: Wed Jun 24 00:57:44 UTC 2009     root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  i386</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/phpstone?a=neUsDGFtLrQ:DShykWIYbrM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/phpstone?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=neUsDGFtLrQ:DShykWIYbrM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/phpstone?i=neUsDGFtLrQ:DShykWIYbrM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=neUsDGFtLrQ:DShykWIYbrM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/phpstone?i=neUsDGFtLrQ:DShykWIYbrM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=neUsDGFtLrQ:DShykWIYbrM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/phpstone?i=neUsDGFtLrQ:DShykWIYbrM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=neUsDGFtLrQ:DShykWIYbrM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/phpstone?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://phpstone.com/freebsd-minor-version-upgrades-note/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpstone.com/freebsd-minor-version-upgrades-note/</feedburner:origLink></item>
		<item>
		<title>安装用于测试MySQL的Perl模块</title>
		<link>http://feedproxy.google.com/~r/phpstone/~3/9Pfv_WqZxRg/</link>
		<comments>http://phpstone.com/install-perl-module-for-test-mysql/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 02:55:08 +0000</pubDate>
		<dc:creator>frePerl</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[webmin]]></category>

		<guid isPermaLink="false">http://phpstone.com/?p=359</guid>
		<description><![CDATA[在我使用Webmin(version 1.480)管理FreeBSD主机上的MySQL数据库服务器时出现：
“警告：您的系统未安装Perl 模块 DBI 和 DBD::mysql，Webmin将无法可靠地访问您的MySQL数据库。点击此处 立刻安装该它们。”
而“点击此处”安装时浏览器无法打开此链接，访问到MySQL手册上的相关资料在其它类Unix系统中安装MySQL，提示“如果安装了DBI和DBD::mysql  Perl模块，可以使用bin/mysql_setpermission脚本增加新账户。”
再查找“Perl安装注意事项”获取到相关的信息是：
“MySQL分发版不包含Perl支持。可以从http://search.cpan.org获得Unix需要的模块，或在Windows中使用ActiveState ppm程序。
如果你想要运行MySQL基准脚本，必须安装Perl支持。
如果你想要安装Perl支持，需要的文件能从http://search.cpan.org的CPAN (Comprehensive Perl Archive Network)获得。”
CPAN是个巨大的Perl软件收藏库，其收集大量有用的Perl模块及其相关文档。
在Unix中安装Perl模块最简单的方法是使用CPAN模块。
shell&#62; perl -MCPAN -e shell
cpan&#62; install DBI
cpan&#62; install DBD::mysql
DBD：：mysql安装运行许多测试。测试中使用默认用户名和密码尝试连接本地MySQL服务器。(默认用户名是Unix中的登录名和Windows中的ODBC。默认密码“没有密码。”) 如果你不能通过这些值连接服务器 (例如，如果你的账户有密码)，测试失败。可以使用force install DBD::mysql忽略失败的测试。
按要求操作，安装DBI时提示：
“Warning (usually harmless): &#8216;YAML&#8217; not installed, will not store persistent state”
YAML是以数据为中央的标记语言，其使用ASCII码（如连字符、问号、冒号、逗号等）构造数据块（标量值或哈希码）。和XML相同，YAML也是一种机器可识别语言，并能和多种脚本语言相结合，其中一种便是Perl。
考虑到YAML也可以当做是一个Perl模块，因此我尝试运行：
cpan&#62; install YAML
成功安装后，刷新Webmin页面，只提示 DBD::mysql 没有安装了，此时 Webmin 已经可以执行DBD::mysql模块的安装了：
正在下载 http://www.cpan.org/modules/02packages.details.txt.gz (794409 字节) ..
收到 1024 字节 (0 %)
收到 79872 字节 (10 %)
收到 159744 [...]]]></description>
			<content:encoded><![CDATA[<p>在我使用Webmin(version 1.480)管理FreeBSD主机上的MySQL数据库服务器时出现：</p>
<p>“警告：您的系统未安装Perl 模块 DBI 和 DBD::mysql，Webmin将无法可靠地访问您的MySQL数据库。点击此处 立刻安装该它们。”</p>
<p>而“点击此处”安装时浏览器无法打开此链接，访问到MySQL手册上的相关资料<a href="http://dev.mysql.com/doc/refman/5.1/zh/installing.html#installing-binary">在其它类Unix系统中安装MySQL</a>，提示“如果安装了DBI和DBD::mysql  Perl模块，可以使用bin/mysql_setpermission脚本增加新账户。”<span id="more-359"></span></p>
<p>再查找<a href="http://dev.mysql.com/doc/refman/5.1/zh/installing.html#perl-support">“Perl安装注意事项”</a>获取到相关的信息是：<br />
“MySQL分发版不包含Perl支持。可以从http://search.cpan.org获得Unix需要的模块，或在Windows中使用ActiveState ppm程序。<br />
如果你想要运行MySQL基准脚本，必须安装Perl支持。<br />
如果你想要安装Perl支持，需要的文件能从<a href="http://search.cpan.org">http://search.cpan.org</a>的CPAN (Comprehensive Perl Archive Network)获得。”</p>
<p>CPAN是个巨大的Perl软件收藏库，其收集大量有用的Perl模块及其相关文档。<br />
在Unix中安装Perl模块最简单的方法是使用CPAN模块。</p>
<p>shell&gt; perl -MCPAN -e shell<br />
cpan&gt; install DBI<br />
cpan&gt; install DBD::mysql</p>
<p>DBD：：mysql安装运行许多测试。测试中使用默认用户名和密码尝试连接本地MySQL服务器。(默认用户名是Unix中的登录名和Windows中的ODBC。默认密码“没有密码。”) 如果你不能通过这些值连接服务器 (例如，如果你的账户有密码)，测试失败。可以使用force install DBD::mysql忽略失败的测试。</p>
<p>按要求操作，安装DBI时提示：<br />
“Warning (usually harmless): &#8216;YAML&#8217; not installed, will not store persistent state”</p>
<p>YAML是以数据为中央的标记语言，其使用ASCII码（如连字符、问号、冒号、逗号等）构造数据块（标量值或哈希码）。和XML相同，YAML也是一种机器可识别语言，并能和多种脚本语言相结合，其中一种便是Perl。</p>
<p>考虑到YAML也可以当做是一个Perl模块，因此我尝试运行：<br />
cpan&gt; install YAML<br />
成功安装后，刷新Webmin页面，只提示 DBD::mysql 没有安装了，此时 Webmin 已经可以执行DBD::mysql模块的安装了：</p>
<blockquote><p>正在下载 http://www.cpan.org/modules/02packages.details.txt.gz (794409 字节) ..<br />
收到 1024 字节 (0 %)<br />
收到 79872 字节 (10 %)<br />
收到 159744 字节 (20 %)<br />
收到 238592 字节 (30 %)<br />
&#8230;</p></blockquote>
<p>但我还是采用手册上提供的方式安装 DBD::mysql</p>
<p>接着安装DBD::mysql时出现错误提示：</p>
<blockquote><p>Running make install</p>
<p>make test had returned bad status, won&#8217;t install without force<br />
Failed during this command:<br />
CAPTTOFU/DBD-mysql-4.012.tar.gz              : make_test NO<br />
&#8230;</p></blockquote>
<p>于是按要求执行：<br />
cpan&gt; force install DBD::mysql<br />
成功完成安装</p>
<p>补记：<a href="http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#mysql-benchmarks">MySQL基准套件</a></p>
<p>通过基准用户可以了解一个给定的SQL实现在哪方面执行得很好或很糟糕。这个基准是单线程的，它可以测量操作执行的最小时间。</p>
<p>要使用基准套件，必须满足下面的要求：</p>
<p>基准套件随MySQL源码分发提供。可以从http://dev.mysql.com/downloads/下载分发，或者使用当前的开发源码树</p>
<p>基准脚本用Perl编写而成，使用Perl DBI模块访问数据库服务器，因此必须安装DBI。还需要为每个待测试的服务器提供服务器专用DBD驱动程序。例如，要测试MySQL、PostgreSQL和DB2，必须安装DBD::mysql、DBD::Pg和DBD::DB2模块。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/phpstone?a=9Pfv_WqZxRg:mzkOh0mklLw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/phpstone?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=9Pfv_WqZxRg:mzkOh0mklLw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/phpstone?i=9Pfv_WqZxRg:mzkOh0mklLw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=9Pfv_WqZxRg:mzkOh0mklLw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/phpstone?i=9Pfv_WqZxRg:mzkOh0mklLw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=9Pfv_WqZxRg:mzkOh0mklLw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/phpstone?i=9Pfv_WqZxRg:mzkOh0mklLw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=9Pfv_WqZxRg:mzkOh0mklLw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/phpstone?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://phpstone.com/install-perl-module-for-test-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpstone.com/install-perl-module-for-test-mysql/</feedburner:origLink></item>
		<item>
		<title>PHP 遍历数组的方法</title>
		<link>http://feedproxy.google.com/~r/phpstone/~3/DQKgDnb3p-c/</link>
		<comments>http://phpstone.com/the-method-of-traverse-an-array-in-php/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 15:25:08 +0000</pubDate>
		<dc:creator>frePerl</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://phpstone.com/?p=323</guid>
		<description><![CDATA[1. foreach()
foreach()是一个用来遍历数组中数据的最简单有效的方法。
#example1:


&#60;?php
$colors = array(&#039;red&#039;,&#039;blue&#039;,&#039;green&#039;,&#039;yellow&#039;);
foreach ($colors as $color) {
	echo &#34;Do you like $color? &#60;br /&#62;&#34;;
}
?&#62;

显示结果：
Do you like red?
Do you like blue?
Do you like green?
Do you like yellow? 
2. while() 
while() 通常和 list()，each()配合使用。
#example2:


&#60;?php
$colors = array(&#039;red&#039;,&#039;blue&#039;,&#039;green&#039;,&#039;yellow&#039;);

while(list($key,$val) = each($colors)) {
	echo &#34;Other list of $val.&#60;br /&#62;&#34;;
}
?&#62;

显示结果：
Other list of red.
Other list of blue.
Other list of green.
Other list of yellow.
3. for() 
#example3:


&#60;?php
$arr [...]]]></description>
			<content:encoded><![CDATA[<h3>1. foreach()</h3>
<p>foreach()是一个用来遍历数组中数据的最简单有效的方法。</p>
<p>#example1:</p>
<pre class="brush: php; ">

&lt;?php
$colors = array(&#039;red&#039;,&#039;blue&#039;,&#039;green&#039;,&#039;yellow&#039;);
foreach ($colors as $color) {
	echo &quot;Do you like $color? &lt;br /&gt;&quot;;
}
?&gt;
</pre>
<p>显示结果：</p>
<p>Do you like red?<br />
Do you like blue?<br />
Do you like green?<br />
Do you like yellow? <span id="more-323"></span></p>
<h3>2. while() </h3>
<p>while() 通常和 list()，each()配合使用。</p>
<p>#example2:</p>
<pre class="brush: php; ">

&lt;?php
$colors = array(&#039;red&#039;,&#039;blue&#039;,&#039;green&#039;,&#039;yellow&#039;);

while(list($key,$val) = each($colors)) {
	echo &quot;Other list of $val.&lt;br /&gt;&quot;;
}
?&gt;
</pre>
<p>显示结果：</p>
<p>Other list of red.<br />
Other list of blue.<br />
Other list of green.<br />
Other list of yellow.</p>
<h3>3. for() </h3>
<p>#example3:</p>
<pre class="brush: php; ">

&lt;?php
$arr = array (&quot;0&quot; =&gt; &quot;zero&quot;,&quot;1&quot; =&gt; &quot;one&quot;,&quot;2&quot; =&gt; &quot;two&quot;);

for ($i = 0;$i &lt; count($arr); $i++) {
	$str = $arr[$i];
	echo &quot;the number is $str.&lt;br /&gt;&quot;;
}
?&gt;
</pre>
<p>显示结果：</p>
<p>the number is zero.<br />
the number is one.<br />
the number is two.</p>
<p>========= 以下是函数介绍 ==========</p>
<h3>key()</h3>
<p>mixed key(array input_array)</p>
<p>key()函数返回input_array中位于当前指针位置的键元素。</p>
<p>#example4</p>
<pre class="brush: php; ">

&lt;?php
$capitals = array(&quot;Ohio&quot; =&gt; &quot;Columbus&quot;,&quot;Towa&quot; =&gt; &quot;Des Moines&quot;,&quot;Arizona&quot; =&gt; &quot;Phoenix&quot;);
echo &quot;&lt;p&gt;Can you name the capitals of these states?&lt;/p&gt;&quot;;
while($key = key($capitals)) {
	echo $key.&quot;&lt;br /&gt;&quot;;
	next($capitals);
//每个key()调用不会推进指针。为此要使用next()函数
}
?&gt;
</pre>
<p>显示结果：</p>
<p>Can you name the capitals of these states?<br />
Ohio<br />
Towa<br />
Arizona</p>
<h3>reset()</h3>
<p>mixed reset(array input_array)</p>
<p>reset()函数用来将input_array的指针设置回数组的开始位置。如果需要在一个脚本中多次查看或处理同一个数组，就经常使用这个函数，另外这个函数还常用于排序结束时。</p>
<p>#example5  －  在#example1上追加代码</p>
<pre class="brush: php; ">

&lt;?php
$colors = array(&#039;red&#039;,&#039;blue&#039;,&#039;green&#039;,&#039;yellow&#039;);
foreach ($colors as $color) {
	echo &quot;Do you like $color? &lt;br /&gt;&quot;;
}

reset($colors);

while(list($key,$val) = each($colors)) {
	echo &quot;$key =&gt; $val&lt;br /&gt;&quot;;
}
?&gt;
</pre>
<p>显示结果：</p>
<p>Do you like red?<br />
Do you like blue?<br />
Do you like green?<br />
Do you like yellow?<br />
0 => red<br />
1 => blue<br />
2 => green<br />
3 => yellow</p>
<p>注意：将一个数组赋值给另一个数组时会重置原来的数组指针，因此在上例中如果我们在循环内部将 $colors 赋给了另一个变量的话将会导致无限循环。<br />
例如将 $s1 = $colors; 添加到while循环内，再次执行代码，浏览器就会无休止地显示结果。</p>
<h3>each()</h3>
<p>array each(array input_array)</p>
<p>each()函数返回输入数组当前键/值对，并将指针推进一个位置。返回的数组包含四个键，键0和key包含键名，而键1和value包含相应的数据。如果执行each()前指针位于数组末尾，则返回FALSE。</p>
<p>#example6</p>
<pre class="brush: php; ">

&lt;?php
$capitals = array(&quot;Ohio&quot; =&gt; &quot;Columbus&quot;,&quot;Towa&quot; =&gt; &quot;Des Moines&quot;,&quot;Arizona&quot; =&gt; &quot;Phoenix&quot;);

$s1 = each($capitals);
print_r($s1);
?&gt;
</pre>
<p>显示结果：</p>
<p>Array ( [1] => Columbus [value] => Columbus [0] => Ohio [key] => Ohio ) </p>
<h3>current()，next()，prev()，end()</h3>
<p>mixed current(array target_array)</p>
<p>current()函数返回位于target_array数组当前指针位置的数组值。与next()、prev()、和end()函数不同，current()不移动指针。<br />
next()函数返回紧接着放在当前数组指针的下一个位置的数组值。<br />
prev()函数返回位于当前指针的前一个位置的数组值，如果指针本来就位于数组的第一个位置，则返回FALSE。<br />
end()函数将指针移向target_array的最后一个位置，并返回最后一个元素。</p>
<p>#example7</p>
<pre class="brush: php; ">

&lt;?php
$fruits = array(&quot;apple&quot;,&quot;orange&quot;,&quot;banana&quot;);

$fruit = current($fruits);	//return &quot;apple&quot;
echo $fruit.&quot;&lt;br /&gt;&quot;;

$fruit = next($fruits);		//return &quot;orange&quot;
echo $fruit.&quot;&lt;br /&gt;&quot;;

$fruit = prev($fruits);		//return &quot;apple&quot;
echo $fruit.&quot;&lt;br /&gt;&quot;;

$fruit = end($fruits);		//return &quot;banana&quot;
echo $fruit.&quot;&lt;br /&gt;&quot;;
?&gt;
</pre>
<p>显示结果：</p>
<p>apple<br />
orange<br />
apple<br />
banana</p>
<p>=========== 下面来测试三种遍历数组的速度 ===========</p>
<p>一般情况下，遍历一个数组有三种方法，for、while、foreach。其中最简单方便的是foreach。下面先让我们来测试一下共同遍历一个有50000个下标的一维数组所耗的时间。</p>
<p>测试环境：<br />
Intel Core Due2 2GHz<br />
2GB 1067MHz DDR3<br />
Mac OS X 10.5.7<br />
Apache 2.0.59<br />
MySQL 5.0.41<br />
PHP 5.2.6</p>
<p>#example8</p>
<pre class="brush: php; ">

&lt;?php
$arr = array();
for($i = 0; $i &lt; 50000; $i++){
$arr[] = $i*rand(1000,9999);
}

function GetRunTime()
{
list($usec,$sec)=explode(&quot; &quot;,microtime());
return ((float)$usec+(float)$sec);
}
######################################
$time_start = GetRunTime(); 

for($i = 0; $i &lt; count($arr); $i++){
$str = $arr[$i];
} 

$time_end = GetRunTime();
$time_used = $time_end - $time_start;

echo &#039;Used time of for:&#039;.round($time_used, 7).&#039;(s)&lt;br /&gt;&lt;br /&gt;&#039;;
unset($str, $time_start, $time_end, $time_used);
######################################
$time_start = GetRunTime();

while(list($key, $val) = each($arr)){
$str = $val;
}
$time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo &#039;Used time of while:&#039;.round($time_used, 7).&#039;(s)&lt;br /&gt;&lt;br /&gt;&#039;;
unset($str, $key, $val, $time_start, $time_end, $time_used);
######################################
$time_start = GetRunTime();
foreach($arr as $key =&gt; $val){
$str = $val;
}

$time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo &#039;Used time of foreach:&#039;.round($time_used, 7).&#039;(s)&lt;br /&gt;&lt;br /&gt;&#039;;

?&gt;
</pre>
<p>测试结果：</p>
<p>Used time of for:0.0228429(s)</p>
<p>Used time of while:0.0544658(s)</p>
<p>Used time of foreach:0.0085628(s)</p>
<p>经过反复多次测试，结果表明，对于遍历同样一个数组，foreach速度最快，最慢的则是while。从原理上来看，foreach是对数组副本进行操作（通过拷贝数组），而while则通过移动数组内部指标进行操作，一般逻辑下认为，while应该比foreach快（因为foreach在开始执行的时候首先把数组复制进去，而while直接移动内部指标。），但结果刚刚相反。原因应该是，foreach是PHP内部实现，而while是通用的循环结构。所以，在通常应用中foreach简单，而且效率高。在PHP5下，foreach还可以遍历类的属性。</p>
<p>&#8211;&#8211; EOF &#8211;&#8211;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/phpstone?a=DQKgDnb3p-c:aJd2MQ93YuE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/phpstone?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=DQKgDnb3p-c:aJd2MQ93YuE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/phpstone?i=DQKgDnb3p-c:aJd2MQ93YuE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=DQKgDnb3p-c:aJd2MQ93YuE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/phpstone?i=DQKgDnb3p-c:aJd2MQ93YuE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=DQKgDnb3p-c:aJd2MQ93YuE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/phpstone?i=DQKgDnb3p-c:aJd2MQ93YuE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=DQKgDnb3p-c:aJd2MQ93YuE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/phpstone?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://phpstone.com/the-method-of-traverse-an-array-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpstone.com/the-method-of-traverse-an-array-in-php/</feedburner:origLink></item>
		<item>
		<title>Mac OS X 上的PHP开发环境</title>
		<link>http://feedproxy.google.com/~r/phpstone/~3/t0CVFqAad2Y/</link>
		<comments>http://phpstone.com/php-development-on-mac-os-x/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 02:43:51 +0000</pubDate>
		<dc:creator>frePerl</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://phpstone.com/?p=304</guid>
		<description><![CDATA[终究还是抵挡不住Apple的诱惑，入手Macbook。在这个从未接触过的Mac OS X上，开始捣鼓我的个人开发环境设置。
一、配置终端
我一直都喜欢用终端的，FreeBSD下用Tcsh，Ubuntu和Mac OS X下也尝试下bash。先查看终端的配置信息：
$echo $SHELL
/bin/bash
$echo $PS1
\h:\W \u\$    &#8211;这个4个参数分别是hostname，工作目录，用户名和美元符$,管理员级的配置文件是/etc/bashrc。
现在先选择终端的偏好设置，我将主题改到Pro并将字体改为Monaco 14pt，这个主题基本上是黑色背景＋20％左右的透明度，视觉效果很不错。然后在shell设定标签中，选择当shell退出时关闭窗口。我选择编辑~/.bash_profile
#设定别名通常在~/.bashrc里设定，我这里只是懒得去两个文件设置了。
#让ls命令显示文件类型颜色
alias ls=&#8217;ls -G&#8217;
#让la命令显示所有文件，这个在FreeBSD的tcsh下是默认选项
alias la=&#8217;ls -a&#8217;
#默认的4个参数是很通用的，我的习惯仅是换了一下位置并且给运行目录加上方括号
PS1=&#8217;\h:\u[\w]\$&#8217;
为什么开发PHP要配置终端（console）呢？一个原因是我认为作为初学者来说，有必须多用命令行熟悉MySQL的操作，而配置好的终端能让你心情愉悦；另外一个原因是Mac OS X是在BSD的分支上发展而来，其原始的Unix血统注定了许多方面使用终端的便捷和强大。
二、 安装与配置MAPM（Apache、PHP、MySQL）
Mac OS X 上默认安装了Apache，既然大家都推荐MAMP，我也先试用一下这个集成的安装包。不考虑用MAMP Pro，3个主程序都是免费的却花钱去买一个集成包，不是很尴尬么？
默认的Mac系统偏好设置下，Web共享是没有开启的，如果已手工开启，得需要先取消。
Preferences&#8230;下为Apache设置Document Root，我这里改到~/Sites/。更改完毕后，MAMP会自动重启Apache使其生效，因此访问：http://localhost/ 就能访问到Mac设定给Web共享下默认的首页“您的网站”。因为MAMP默认的站点根目录是“/Applications/MAMP/htdocs/&#8221;更改后，任然可以用&#8221;http://localhost/MAMP/&#8221;访问其起始配置页面。

这个页面可以轻松地查看phpinfo，访问phpmyadmin和SQLitemanager。
现在要来修改MySQL的密码。MAMP默认设定的MySQL用户使用root，密码使用root。原本以为我可以直接在终端登陆，提示“command not found”。找到MySQL命令文件夹“/Applications/MAMP/Library/bin/”，修改~/.bash_profile添加环境变量：
PATH=$PATH:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
:/Applications/MAMP/Library/bin
执行：source .bash_profile使其及时生效
#更改root口令
$mysqladmin -u root -p root password newpassword
#更改phpMyAdmin配置文件的数据库用户口令
$cd /Applications/MAMP/bin/phpMyAdmin
$vi config.inc.php
#修改如下语句段
$cfg['Servers'][$i]['password']      = 
#MAMP的起始页能直接进入phpMyAdmin，说明php文件里也配置了数据库的账号密码，
#至于这个起始页文件的位置好像不太好找，我想到肯定在httpd.conf中定义了alias,于是
$cat /Applications/MAMP/conf/apache/httpd.conf &#124; grep MAMP
Alias /MAMP &#8220;/Applications/MAMP/bin/mamp&#8221;
$cd /Applications/MAMP/bin/mamp/
$ls
$vi index.php
#定位搜索“root”字符串，同样更改密码
$link = @mysql_connect(&#8217;:/Applications/MAMP/tmp/mysql/mysql.sock&#8217;, &#8216;root&#8217;, [...]]]></description>
			<content:encoded><![CDATA[<p>终究还是抵挡不住Apple的诱惑，入手Macbook。在这个从未接触过的Mac OS X上，开始捣鼓我的个人开发环境设置。</p>
<h3>一、配置终端</h3>
<p>我一直都喜欢用终端的，FreeBSD下用Tcsh，Ubuntu和Mac OS X下也尝试下bash。先查看终端的配置信息：</p>
<blockquote><p>$echo $SHELL<br />
/bin/bash</p>
<p>$echo $PS1<br />
\h:\W \u\$    &#8211;这个4个参数分别是hostname，工作目录，用户名和美元符$,管理员级的配置文件是/etc/bashrc。</p></blockquote>
<p>现在先选择终端的偏好设置，我将主题改到Pro并将字体改为Monaco 14pt，这个主题基本上是黑色背景＋20％左右的透明度，视觉效果很不错。然后在shell设定标签中，选择当shell退出时关闭窗口。我选择编辑~/.bash_profile<span id="more-304"></span></p>
<blockquote><p>#设定别名通常在~/.bashrc里设定，我这里只是懒得去两个文件设置了。</p>
<p>#让ls命令显示文件类型颜色<br />
alias ls=&#8217;ls -G&#8217;<br />
#让la命令显示所有文件，这个在FreeBSD的tcsh下是默认选项<br />
alias la=&#8217;ls -a&#8217;</p>
<p>#默认的4个参数是很通用的，我的习惯仅是换了一下位置并且给运行目录加上方括号<br />
PS1=&#8217;\h:\u[\w]\$&#8217;</p></blockquote>
<p>为什么开发PHP要配置终端（console）呢？一个原因是我认为作为初学者来说，有必须多用命令行熟悉MySQL的操作，而配置好的终端能让你心情愉悦；另外一个原因是Mac OS X是在BSD的分支上发展而来，其原始的Unix血统注定了许多方面使用终端的便捷和强大。</p>
<h3>二、 安装与配置MAPM（Apache、PHP、MySQL）</h3>
<p>Mac OS X 上默认安装了Apache，既然大家都推荐<a href="http://www.mamp.info/en/index.html">MAMP</a>，我也先试用一下这个集成的安装包。不考虑用MAMP Pro，3个主程序都是免费的却花钱去买一个集成包，不是很尴尬么？</p>
<p>默认的Mac系统偏好设置下，Web共享是没有开启的，如果已手工开启，得需要先取消。<br />
Preferences&#8230;下为Apache设置Document Root，我这里改到~/Sites/。更改完毕后，MAMP会自动重启Apache使其生效，因此访问：http://localhost/ 就能访问到Mac设定给Web共享下默认的首页“您的网站”。因为MAMP默认的站点根目录是“/Applications/MAMP/htdocs/&#8221;更改后，任然可以用&#8221;http://localhost/MAMP/&#8221;访问其起始配置页面。</p>
<p><img src="http://phpstone.com/wp-content/uploads/2009/06/mamp.png" alt="mamp" title="mamp" width="600" height="398" class="alignnone size-full wp-image-314" /></p>
<p>这个页面可以轻松地查看phpinfo，访问phpmyadmin和SQLitemanager。</p>
<p>现在要来修改MySQL的密码。MAMP默认设定的MySQL用户使用root，密码使用root。原本以为我可以直接在终端登陆，提示“command not found”。找到MySQL命令文件夹“/Applications/MAMP/Library/bin/”，修改~/.bash_profile添加环境变量：</p>
<p>PATH=$PATH:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin<br />
:/Applications/MAMP/Library/bin</p>
<p>执行：source .bash_profile使其及时生效</p>
<blockquote><p>#更改root口令<br />
$mysqladmin -u root -p root password newpassword</p>
<p>#更改phpMyAdmin配置文件的数据库用户口令<br />
$cd /Applications/MAMP/bin/phpMyAdmin<br />
$vi config.inc.php<br />
#修改如下语句段<br />
$cfg['Servers'][$i]['password']      = </p>
<p>#MAMP的起始页能直接进入phpMyAdmin，说明php文件里也配置了数据库的账号密码，<br />
#至于这个起始页文件的位置好像不太好找，我想到肯定在httpd.conf中定义了alias,于是</p>
<p>$cat /Applications/MAMP/conf/apache/httpd.conf | grep MAMP<br />
Alias /MAMP &#8220;/Applications/MAMP/bin/mamp&#8221;</p>
<p>$cd /Applications/MAMP/bin/mamp/<br />
$ls<br />
$vi index.php<br />
#定位搜索“root”字符串，同样更改密码<br />
$link = @mysql_connect(&#8217;:/Applications/MAMP/tmp/mysql/mysql.sock&#8217;, &#8216;root&#8217;, &#8216;    root&#8217;);</p></blockquote>
<p>这样，就能以修改后的密码进入起始页和phpMyAdmin，不然做为对外开放的MAMP，弱口令就不安全了。至于SQLite的配置，我还一点都不熟悉，这里先不做描叙了。</p>
<h3>三、安装与配置Vim</h3>
<p>对于Linux用户来说，Vim再也熟悉不过了，因为这个开源软件本身的魅力，更有很多人在Windows下使用Gvim，在Mac下使用<a href="http://code.google.com/p/macvim/">Macvim</a>。这里有两位国内的Vim爱好者做了不少的研究，非常感谢他们的blog提供的技术分享：<br />
Dexter.Yy：<br />
<a href="http://www.limboy.com/2009/05/30/vim-setting/">面向前端开发者和TextMate粉丝的vim配置</a><br />
<a href="http://www.limboy.com/2009/06/07/vim-setting-more/">继续补充vim配置技巧——上次的vimrc还不够强力</a></p>
<p>gracecode.com：<br />
<a href="http://www.gracecode.com/category/496/">学习Vim编辑器</a></p>
<p>当然，还有在网上看了很多资料去了解，之前一直有在FreeBSD和Ubuntu的Console下使用Vi和Vim，到现在才清晰的知道Vim也可以是如此强大且华丽。由于针对PHP方面对Macvim的配置还不是那么熟悉，最近也在学习XHTML＋CSS方面的内容，因此配置直接采用Dexter.Yy提供的，只稍做了修改。就是在~/.vimrc中将原本的&#8221;set columns=171&#8243;,&#8221;set lines=58<br />
&#8220;,&#8221;winpos 52 42&#8243;（设置窗口宽、高和初始位置）加上仅使Macvim生效而不使Console下的Vi和Vim生效的条件语句：</p>
<blockquote><p>
if has(&#8221;gui_running&#8221;) || has (&#8221;gui_macvim&#8221;)<br />
&#8220;初始窗口宽度与高度<br />
	set columns=171<br />
	set lines=58<br />
&#8220;初值窗口位置：<br />
	winpos 52 42<br />
endif
</p></blockquote>
<p>不然在Console中使用vi和vim命令就会放大console窗口了。</p>
<p>Tips:在家目录建立.vim文件夹，在.vim下建立plugin文件夹存放插件如NERD_tree.vim，建立after下的syntax存放语法插件如css.vim，建立colors文件夹存放配色方案如yytextmate.vim</p>
<p>下面是我使用的效果：</p>
<p><a href="http://phpstone.com/wp-content/uploads/2009/06/Macvim.png"><img src="http://phpstone.com/wp-content/uploads/2009/06/Macvim-300x184.png" alt="Macvim" title="Macvim" width="300" height="184" class="alignnone size-medium wp-image-320" /></a></p>
<p>&#8211; To be continued</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/phpstone?a=t0CVFqAad2Y:IGix_kMR5-s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/phpstone?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=t0CVFqAad2Y:IGix_kMR5-s:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/phpstone?i=t0CVFqAad2Y:IGix_kMR5-s:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=t0CVFqAad2Y:IGix_kMR5-s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/phpstone?i=t0CVFqAad2Y:IGix_kMR5-s:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=t0CVFqAad2Y:IGix_kMR5-s:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/phpstone?i=t0CVFqAad2Y:IGix_kMR5-s:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=t0CVFqAad2Y:IGix_kMR5-s:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/phpstone?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://phpstone.com/php-development-on-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://phpstone.com/php-development-on-mac-os-x/</feedburner:origLink></item>
		<item>
		<title>在Windows上使用Putty通过OpenSSH安全地登陆FreeBSD</title>
		<link>http://feedproxy.google.com/~r/phpstone/~3/0VAxz0bdLso/</link>
		<comments>http://phpstone.com/using-putty-on-windows-to-login-freebsd-securely-via-openssh/#comments</comments>
		<pubDate>Sat, 16 May 2009 17:05:11 +0000</pubDate>
		<dc:creator>frePerl</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[putty]]></category>

		<guid isPermaLink="false">http://phpstone.com/?p=259</guid>
		<description><![CDATA[看过delphij的实现安全的三种途径这篇文章后决定将FreeBSD服务器的SSH登录改为使用密钥认证的方式；另外也是因为看到 /var/log/messages 里满是这样的记录：
May  1 13:00:12 stone sshd[12296]: error: PAM: authentication error for illegal user admin from 220.173.60.209
May  1 13:01:24 stone sshd[12301]: error: PAM: authentication error for illegal user admin from 204.8.216.165
May  1 13:01:57 stone sshd[12307]: error: PAM: authentication error for illegal user admin from 77.243.236.32
测试环境：FreeBSD 7.0-RELEASE Putty 0.60
OpenSSH 是一组用于安全地访问远程计算机的连接工具。它可以作为 rlogin、 rsh rcp [...]]]></description>
			<content:encoded><![CDATA[<p>看过delphij的<a href="http://blog.delphij.net/archives/2009/05/post-561.html">实现安全的三种途径</a>这篇文章后决定将FreeBSD服务器的SSH登录改为使用密钥认证的方式；另外也是因为看到 /var/log/messages 里满是这样的记录：</p>
<blockquote><p>May  1 13:00:12 stone sshd[12296]: error: PAM: authentication error for illegal user admin from 220.173.60.209<br />
May  1 13:01:24 stone sshd[12301]: error: PAM: authentication error for illegal user admin from 204.8.216.165<br />
May  1 13:01:57 stone sshd[12307]: error: PAM: authentication error for illegal user admin from 77.243.236.32</p></blockquote>
<p>测试环境：FreeBSD 7.0-RELEASE Putty 0.60<span id="more-259"></span></p>
<p>OpenSSH 是一组用于安全地访问远程计算机的连接工具。它可以作为 rlogin、 rsh rcp 以及 telnet 的直接替代品使用。更进一步， 其他任何 TCP/IP 连接都可以通过 SSH 安全地进行隧道/转发。 OpenSSH 对所有的传输进行加密， 从而有效地阻止了窃听、 连接劫持，以及其他网络级的攻击。</p>
<p><img src="http://phpstone.com/wp-content/uploads/2009/05/openssh.jpg" alt="openssh" title="openssh" width="500" height="417" class="alignnone size-full wp-image-265" /></p>
<h3>1. 确保sshd正常启用</h3>
<p>查看 /etc/rc.conf  是否存在 sshd_enable=&#8221;YES&#8221; ；如果没有添加进去并人工方式启动#/etc/rc.d/sshd start ；然后查询 22端口是否启动：#sockstat -4l</p>
<blockquote><p>root     sshd       8085  4  tcp4   *:22                  *:*</p></blockquote>
<h3>2. 配置 OpenSSH</h3>
<p>针对 OpenSSH 服务程序和客户端的系统级配置文件在 /etc/ssh 目录中。ssh_config 用于配置客户端的设定， 而 sshd_config 则用于配置服务器端。</p>
<p>现在来说通过配置 OpenSSH 使服务器接受公钥（public-key）认证。sshd_config 这个文件指定的一些默认值都是生效的，虽然这些选项被注释掉了，如果你想改变默认值的话，那就取消注释更改值或者直接添加相同的选项和值覆盖默认值的作用。</p>
<p>#vi /etc/ssh/sshd_config</p>
<blockquote><p>#默认 SSH 端口为 22 ，如果需要可以更改<br />
 Port 22  </p>
<p> #仅接受版本2的密钥，默认值<br />
 Protocol 2</p>
<p> #绝对不要允许 root 用户直接通过网络登录，默认值<br />
 PermitRootLogin no<br />
 StrictModes yes<br />
 MaxAuthTries 6</p>
<p> #启用公钥认证<br />
 RSAAuthentication no         #默认值为 yes<br />
 PubkeyAuthentication yes   #默认值</p>
<p> #不使用基于主机的认证，加强 OpenSSH 的安全性<br />
 RhostsRSAAuthentication no   #默认值<br />
 HostbasedAuthentication no   #默认值<br />
 IgnoreUserKnownHosts yes     #默认值为 no<br />
 PermitEmptyPassword no       #默认值</p>
<p> #禁用 PAM 认证即口令形式认证 默认值为yes<br />
 ChallengeResponseAuthentication no
</p></blockquote>
<p>编辑完成后重启 sshd 进程：`#/etc/rc.d/sshd restart` ；Linux 系统上一般是 `/etc/init.d/ssh restart`</p>
<p><strong>注意：</strong>因为是通过 SSH 口令认证的方式连接到服务器来操作，操作ChallengeResponseAuthentication 这个选项改为 no 后不能退出登陆，继续下面操作，或者也可以在成功验证了密钥后再改这个选项。以免出错导致无法远程SSH登录服务器。</p>
<h3>3. 生成公钥（public key）和私钥（private key）</h3>
<p>用需要生成密钥的用户通过 SSH 密码认证的方式登录<br />
FreeBSD 使用 ssh-keygen 来生成 DSA 或 RSA 密钥对用于验证用户的身份：</p>
<blockquote><p>% ssh-keygen -t rsa<br />
Generating public/private dsa key pair.</p>
<p>#不输入即使用默认<br />
Enter file in which to save the key (/home/user/.ssh/id_rsa):<br />
Created directory &#8216;/home/user/.ssh&#8217;.</p>
<p>#密钥的密码，需要输入并记住<br />
Enter passphrase (empty for no passphrase):<br />
Enter same passphrase again:<br />
Your identification has been saved in /home/user/.ssh/id_rsa.<br />
Your public key has been saved in /home/user/.ssh/id_rsa.pub.<br />
The key fingerprint is:<br />
bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com
</p></blockquote>
<p>ssh-keygen 会生成一个包含公私钥对用于验证身份。 私钥将保存到 ~/.ssh/id_dsa 或 ~/.ssh/id_rsa， 而公钥则被存放到 ~/.ssh/id_dsa.pub 或 ~/.ssh/id_rsa.pub，文件名取决于您选择的 DSA 和 RSA 密钥类型。RSA 或者 DSA 公钥必须被存放到远程机器上的 ~/.ssh/authorized_keys 才能够使系统正确运转，因此 `#cp id_rsa.pub authorized_keys`<br />
将公钥复制一份为 authorized_keys 此文件既可。将私钥 id_rsa 复制到 Windows 客户端。</p>
<h3>4. 转换 OpenSSH 生成的私钥 id_rsa 到 putty 能使用的文件</h3>
<p>这里需要借助一个工具 puttygen.exe ，从 <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">Putty 的网站</a>上可以下载。</p>
<p>执行 puttygen.exe 后，点击 Load 按钮，打开从远程服务器下载的 id_rsa ，这时要求输入生成密钥时输入的密钥密码。</p>
<p><img src="http://phpstone.com/wp-content/uploads/2009/05/puttygen1.png" alt="puttygen1" title="puttygen1" width="480" height="470" class="alignnone size-full wp-image-268" /></p>
<p>验证成功后显示密钥文件，然后点击 Save private key，就可以将文件另存为 &#8220;id_rsa.ppk&#8221; 这样的 putty 能够使用的私钥文件了。</p>
<h3>5. 配置和使用 Putty</h3>
<p>打开 Putty 程序，点击边栏的 SSH ，在 “Preferred SSH protocol version”下选择“2 only”，表示只使用 SSH 版本2；</p>
<p><img src="http://phpstone.com/wp-content/uploads/2009/05/putty1.png" alt="putty1" title="putty1" width="452" height="440" class="alignnone size-full wp-image-269" /></p>
<p>点击 SSH 下的 Auth，然后点击 Browse（浏览），打开刚才的转换好的“id_rsa.ppk”私钥；</p>
<p><img src="http://phpstone.com/wp-content/uploads/2009/05/putty2.png" alt="putty2" title="putty2" width="454" height="439" class="alignnone size-full wp-image-270" /></p>
<p>最后回到 Session ，在 Host Name 下填入服务器的IP地址或者域名，Saved Sessions 下填入这个会话的会话名称（任意你喜欢的命名），然后点Save保存就设置好了。</p>
<p><img src="http://phpstone.com/wp-content/uploads/2009/05/putty3.png" alt="putty3" title="putty3" width="450" height="440" class="alignnone size-full wp-image-271" /></p>
<p>接着双击会话名称就打开了登陆界面，与采用口令认证的提示不同，然后输入生成密码时设置的密钥密码既可登陆：</p>
<blockquote><p>Login as: test<br />
Authenticating with public key &#8220;imported-openssh-key&#8221;<br />
Passphrase for key &#8220;imported-openssh-key&#8221;:<br />
Last login: Wed May 31 12:35:00 2006 from 192.168.1.10<br />
test@server:~$</p></blockquote>
<p>Tips：你应该定期地同时更改公钥和私钥。</p>
<p>Ps：如果本身是FreeBSD，Linux或者Mac OS客户端，使用密钥更加简单，只需要将id_rsa放入~/.ssh文件夹并且确保.ssh文件夹的权限为700，id_rsa的权限为600即可正常登陆。</p>
<p>参考资料：<br />
<a href="http://linux-sxs.org/networking/openssh.putty.html">Using Putty on Windows to login Linux securely via OpenSSH</a><br />
<a href="http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/openssh.html">FreeBSD Handbook:OpenSSH</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/phpstone?a=0VAxz0bdLso:VTwX5GD1XIw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/phpstone?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=0VAxz0bdLso:VTwX5GD1XIw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/phpstone?i=0VAxz0bdLso:VTwX5GD1XIw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=0VAxz0bdLso:VTwX5GD1XIw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/phpstone?i=0VAxz0bdLso:VTwX5GD1XIw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=0VAxz0bdLso:VTwX5GD1XIw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/phpstone?i=0VAxz0bdLso:VTwX5GD1XIw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=0VAxz0bdLso:VTwX5GD1XIw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/phpstone?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://phpstone.com/using-putty-on-windows-to-login-freebsd-securely-via-openssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpstone.com/using-putty-on-windows-to-login-freebsd-securely-via-openssh/</feedburner:origLink></item>
		<item>
		<title>让我们开始使用firefox</title>
		<link>http://feedproxy.google.com/~r/phpstone/~3/o1yWECimccs/</link>
		<comments>http://phpstone.com/let-us-start-using-firefox/#comments</comments>
		<pubDate>Wed, 13 May 2009 07:29:20 +0000</pubDate>
		<dc:creator>frePerl</dc:creator>
				<category><![CDATA[网页浏览器]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://phpstone.com/?p=219</guid>
		<description><![CDATA[目前我使用的网页浏览器有Firefox 3,Internet Explorer 8,Sarari 4 Beta,Chrome。但归结到底，最喜爱的任然是Firefox，习惯于其功能的强大（虽然安装多个插件后firefox启动缓慢，但还是忍了）。下面从Firefox强大的附加组件（Add-On）出发，谈谈本人的一些日常应用。
1. 书签工具栏
个人印象中最开始有书签工具栏的应该就是firefox:


个人非常不喜欢使用IE收藏夹，Firefox的书签工具栏的方式给人方便又不影响视觉效果，现在我们来增强书签的功能，使用Firefox的附加组件（Add-On) Xmarks 来在不同电脑间及时同步书签。
在其网站上申请好账号后，在图示的用户名密码处填入账号，并记住密码。而后每次在书签工具栏修改的收藏网址就会自动上传到xmarks.com的服务器。如果你在公司和家里都使用着Firefox再加上Xmarks这个附加组件，多台电脑使用的书签都将自动同步。当然也可以将Xmarks应用于IE 7,8和Sarari 3,4，不同于firefox的是其作为独立程序运行，而不是插件。
2. 访问被封站点
gladder是一个Firefox插件，名字被解释为Great Ladder (Ladder for Great Firewall 防火长城之梯)，目标是帮助人们跨过防火长城访问境外被查封的网站。
借助此工具，被封的blogspot.com，wordpress.com等旗下的个人网站都可以通过自动代理访问。

PS：自从GFW升级后，这个强有力的工具也陷入了困境。
3. 订阅阅读工具 Brief
Brief 是一个本地的RSS feed 订阅工具，作为firefox的扩展，用来阅读订阅在firefox书签里的RSS、Atom源。使用方法是先将站点订阅到书签工具栏的一个文件夹内，然后设置Brief的订阅标签将订阅定位到这个书签订阅的文件夹就可以了。

我认为他的优势是简单，打开这个工具本身的速度快，支持多种语言，支持搜索，书签等，还可以使用CSS自定义外观。话不多说，用用就知道了。
4. Flagfox 显示描述当前服务器位置的国旗
Flagfox 是个非常简单的插件，但是又非常有趣，能显示当前网站服务器的地理国旗和地理位置信息。
双击国旗图标就能显示服务器的地址信息并附上Google Maps位置：

============= 以下是给Web前端开发的 ============
5. Web Developer
Web Developer目前的版本到了1.18，已经支持简体中文，对于前端开发者来说是个很好的辅助工具。可以禁用JavaScript、CSS、图片等，显示网页上的表单，图片等的一些综合信息，工具栏里更是可以使用W3C的校验工具校验CSS、HTML、Feed等。
安装后默认出现在firefox的书签栏下方，不使用时可用设置不显示Web Developer这个工具栏。
6. Firebug 
对于前端开发，Firebug 绝对可以称得上是一个强有力的工具可轻松地分析整个网站的架构HTML和CSS布局，脚本调试，DOM等用过的，没有不说好的，不信的话你就用用看。
这里有Firebug的视频介绍：http://css-tricks.com/video-screencasts/15-introduction-to-firebug/
这里还有有趣的：“有时候我们糟糕的代码不想让同行轻松的使用 F12 就能一览无遗”：http://www.gracecode.com/archives/2959/

7. Html Validator
个人比较推崇Web标准，Html Validator 这个校验工具可以使你不用去W3C的网站，本地既可校验HTML代码，这个工具可以安装在Mac OS X、Linux、FreeBSD等多个平台的firefox上。
安装完此插件后，将提示设置选择算法，一般是选SGML解析器，用来校验XHTML，在firefox的右下角会有一个HTML校验器的图标，如果当前网站的HTML有问题，就会显示为X，双击图标即可以看到本页的源代码和相应的HTML错误和警告，双击错误条目能到达错误位置迅速找到错误代码。
&#8211;EOF&#8211;
]]></description>
			<content:encoded><![CDATA[<p>目前我使用的网页浏览器有Firefox 3,Internet Explorer 8,Sarari 4 Beta,Chrome。但归结到底，最喜爱的任然是Firefox，习惯于其功能的强大（虽然安装多个插件后firefox启动缓慢，但还是忍了）。下面从Firefox强大的附加组件（Add-On）出发，谈谈本人的一些日常应用。</p>
<h3>1. 书签工具栏</h3>
<p>个人印象中最开始有书签工具栏的应该就是firefox:</p>
<p><img class="alignnone size-full wp-image-233" title="bookmark" src="http://phpstone.com/wp-content/uploads/2009/05/bookmark.png" alt="bookmark" width="589" height="321" /><br />
<span id="more-219"></span><br />
个人非常不喜欢使用IE收藏夹，Firefox的书签工具栏的方式给人方便又不影响视觉效果，现在我们来增强书签的功能，使用Firefox的附加组件（Add-On) <a href="http://www.xmarks.com/">Xmarks</a> 来在不同电脑间及时同步书签。</p>
<p>在其网站上申请好账号后，在图示的用户名密码处填入账号，并记住密码。而后每次在书签工具栏修改的收藏网址就会自动上传到xmarks.com的服务器。如果你在公司和家里都使用着Firefox再加上Xmarks这个附加组件，多台电脑使用的书签都将自动同步。当然也可以将Xmarks应用于IE 7,8和Sarari 3,4，不同于firefox的是其作为独立程序运行，而不是插件。</p>
<h3>2. 访问被封站点</h3>
<p><a href="http://gneheix.googlepages.com/gladder">gladder</a>是一个Firefox插件，名字被解释为Great Ladder (Ladder for Great Firewall 防火长城之梯)，目标是帮助人们跨过防火长城访问境外被查封的网站。</p>
<p>借助此工具，被封的blogspot.com，wordpress.com等旗下的个人网站都可以通过自动代理访问。</p>
<p><img class="alignnone size-full wp-image-236" title="gladder" src="http://phpstone.com/wp-content/uploads/2009/05/gladder.png" alt="gladder" width="452" height="533" /></p>
<p>PS：自从GFW升级后，这个强有力的工具也陷入了困境。</p>
<h3>3. 订阅阅读工具 Brief</h3>
<p><a href="http://brief.mozdev.org/">Brief</a> 是一个本地的RSS feed 订阅工具，作为firefox的扩展，用来阅读订阅在firefox书签里的RSS、Atom源。使用方法是先将站点订阅到书签工具栏的一个文件夹内，然后设置Brief的订阅标签将订阅定位到这个书签订阅的文件夹就可以了。</p>
<p><img src="http://phpstone.com/wp-content/uploads/2009/05/brief2.png" alt="brief2" title="brief2" width="578" height="329" class="alignnone size-full wp-image-254" /></p>
<p>我认为他的优势是简单，打开这个工具本身的速度快，支持多种语言，支持搜索，书签等，还可以使用CSS自定义外观。话不多说，用用就知道了。</p>
<h3>4. Flagfox 显示描述当前服务器位置的国旗</h3>
<p><a href="http://flagfox.servehttp.com/">Flagfox</a> 是个非常简单的插件，但是又非常有趣，能显示当前网站服务器的地理国旗和地理位置信息。</p>
<p>双击国旗图标就能显示服务器的地址信息并附上Google Maps位置：</p>
<p><img src="http://phpstone.com/wp-content/uploads/2009/05/flagfox2.png" alt="flagfox2" title="flagfox2" width="560" height="333" class="alignnone size-full wp-image-256" /></p>
<p>============= 以下是给Web前端开发的 ============</p>
<h3>5. Web Developer</h3>
<p><a href="https://addons.mozilla.org/zh-CN/firefox/addon/60">Web Developer</a>目前的版本到了1.18，已经支持简体中文，对于前端开发者来说是个很好的辅助工具。可以禁用JavaScript、CSS、图片等，显示网页上的表单，图片等的一些综合信息，工具栏里更是可以使用W3C的校验工具校验CSS、HTML、Feed等。</p>
<p>安装后默认出现在firefox的书签栏下方，不使用时可用设置不显示Web Developer这个工具栏。</p>
<h3>6. Firebug </h3>
<p>对于前端开发，<a href="https://addons.mozilla.org/zh-CN/firefox/addon/1843">Firebug</a> 绝对可以称得上是一个强有力的工具可轻松地分析整个网站的架构HTML和CSS布局，脚本调试，DOM等用过的，没有不说好的，不信的话你就用用看。</p>
<p>这里有Firebug的视频介绍：<a href="http://css-tricks.com/video-screencasts/15-introduction-to-firebug/">http://css-tricks.com/video-screencasts/15-introduction-to-firebug/</a><br />
这里还有有趣的：“有时候我们糟糕的代码不想让同行轻松的使用 F12 就能一览无遗”：<a href="http://www.gracecode.com/archives/2959/">http://www.gracecode.com/archives/2959/</a></p>
<p><a href="http://phpstone.com/wp-content/uploads/2009/05/firebug.png"><img src="http://phpstone.com/wp-content/uploads/2009/05/firebug-300x233.png" alt="firebug" title="firebug" width="300" height="233" class="alignnone size-medium wp-image-337" /></a></p>
<h3>7. Html Validator</h3>
<p>个人比较推崇Web标准，<a href="http://users.skynet.be/mgueury/mozilla/download.html">Html Validator</a> 这个校验工具可以使你不用去W3C的网站，本地既可校验HTML代码，这个工具可以安装在Mac OS X、Linux、FreeBSD等多个平台的firefox上。</p>
<p>安装完此插件后，将提示设置选择算法，一般是选SGML解析器，用来校验XHTML，在firefox的右下角会有一个HTML校验器的图标，如果当前网站的HTML有问题，就会显示为X，双击图标即可以看到本页的源代码和相应的HTML错误和警告，双击错误条目能到达错误位置迅速找到错误代码。</p>
<p>&#8211;EOF&#8211;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/phpstone?a=o1yWECimccs:gndFKO4qUrY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/phpstone?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=o1yWECimccs:gndFKO4qUrY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/phpstone?i=o1yWECimccs:gndFKO4qUrY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=o1yWECimccs:gndFKO4qUrY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/phpstone?i=o1yWECimccs:gndFKO4qUrY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=o1yWECimccs:gndFKO4qUrY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/phpstone?i=o1yWECimccs:gndFKO4qUrY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=o1yWECimccs:gndFKO4qUrY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/phpstone?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://phpstone.com/let-us-start-using-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpstone.com/let-us-start-using-firefox/</feedburner:origLink></item>
		<item>
		<title>SEO:WordPress中使用永久连结</title>
		<link>http://feedproxy.google.com/~r/phpstone/~3/ewMuQuscyMA/</link>
		<comments>http://phpstone.com/using-permalink-in-wordpress/#comments</comments>
		<pubDate>Sat, 09 May 2009 16:09:24 +0000</pubDate>
		<dc:creator>frePerl</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://blog.phpstone.com/?p=197</guid>
		<description><![CDATA[Permalink是Permanent Link（永久的连接）的缩写，Permalink 指向的均为一个网络日志条目 (Entry) 的独立网页。
WordPress2.7中的设置位置是Settings-&#62;Permalinks。除开默认的“http://phpstone.com/?p=123”设置格式，还有按天数和名称、按月和名称、按数字的设置格式，这些都只要点选并保存就可以了。对于Custom Structure（自定义格式），这里的内容就变得丰富了，可以按照规定的变量自己定义。
%year%
文章发表年份，四位数字，比如2009
%monthnum%
文章发表月份，比如05
%day%
文章发表日期，比如28
%hour%
文章发表小时数，比如15
%minute%
文章发表分钟数，比如43
%second%
文章发表秒数，比如33
%postname%
文章标题，中文标题不推荐使用
%post_id%
文章的id，比如423
%category%
文章的分类
%author%
文章作者
注：这些类型的变量可以在大多数的系统上正常运作，但是某些情况下仍会出现问题。
1.如果用%postname%作为唯一的因素，并且你的样式表或者wp-admin文件夹也有类似的格式的话，重写规则可能使人们无法进入的网页，最好包括一些数字数据（如文章编号或日期）来防止这种情况发生。“/%year%/%monthnum%/%day%/%postname%/”是个不错的开始。
2.如果使用Apache 2之前的版本，%category%无法在一些mod_rewrite的实施中正常工作，如果你使用Apache1.x并且没有处理这些问题的经验，最好不要在permalink结构中使用%category%
3.对于拥有多个目录的文章，只有一个目录能正常显示在permalink中，将会显示编号数字较小的那个目录显示，不过文章本身依旧可以通过所有的目录访问到。
4.如果使用自定义的URI，需要注意的是要保证每个永久连接的异样性，因此在每个虚拟网址结束时使用%post_id%或者%postname%。
多数网站使用的格式为：

/%year%/%monthnum%/%day%/%postname%/

如：
http://www.smashingmagazine.com/
http://www.techcrunch.com/
对于这种文章较多的大型英文网站来说是个不错的选择。	
象我这种比较喜欢走极端的也挺多，只使用文章名：

/%postname%/

如：
http://phpstone.com
http://css-tricks.com/
http://davidwalsh.name/
短链接自然有它的好处，象本站这种发布文章不是很多的站点来说，也是可以采用的，不过对于非英语站点来说，每篇文章的链接都是需要手工编辑的，否则默认显示为本地化语言的链接，而且非英语的WordPress后台编辑界面在添加新文章时，得先保存草稿才会显示Permalink的编辑功能。
&#8230; to be continued
]]></description>
			<content:encoded><![CDATA[<p>Permalink是Permanent Link（永久的连接）的缩写，Permalink 指向的均为一个网络日志条目 (Entry) 的独立网页。</p>
<p>WordPress2.7中的设置位置是Settings-&gt;Permalinks。除开默认的“http://phpstone.com/?p=123”设置格式，还有按天数和名称、按月和名称、按数字的设置格式，这些都只要点选并保存就可以了。对于Custom Structure（自定义格式），这里的内容就变得丰富了，可以按照规定的变量自己定义。<span id="more-197"></span></p>
<blockquote><p>%year%<br />
文章发表年份，四位数字，比如2009<br />
%monthnum%<br />
文章发表月份，比如05<br />
%day%<br />
文章发表日期，比如28<br />
%hour%<br />
文章发表小时数，比如15<br />
%minute%<br />
文章发表分钟数，比如43<br />
%second%<br />
文章发表秒数，比如33<br />
%postname%<br />
文章标题，中文标题不推荐使用<br />
%post_id%<br />
文章的id，比如423<br />
%category%<br />
文章的分类<br />
%author%<br />
文章作者</p></blockquote>
<p>注：这些类型的变量可以在大多数的系统上正常运作，但是某些情况下仍会出现问题。</p>
<p>1.如果用%postname%作为唯一的因素，并且你的样式表或者wp-admin文件夹也有类似的格式的话，重写规则可能使人们无法进入的网页，最好包括一些数字数据（如文章编号或日期）来防止这种情况发生。“/%year%/%monthnum%/%day%/%postname%/”是个不错的开始。</p>
<p>2.如果使用Apache 2之前的版本，%category%无法在一些mod_rewrite的实施中正常工作，如果你使用Apache1.x并且没有处理这些问题的经验，最好不要在permalink结构中使用%category%</p>
<p>3.对于拥有多个目录的文章，只有一个目录能正常显示在permalink中，将会显示编号数字较小的那个目录显示，不过文章本身依旧可以通过所有的目录访问到。</p>
<p>4.如果使用自定义的URI，需要注意的是要保证每个永久连接的异样性，因此在每个虚拟网址结束时使用%post_id%或者%postname%。</p>
<p>多数网站使用的格式为：</p>
<blockquote><p>
/%year%/%monthnum%/%day%/%postname%/
</p></blockquote>
<p>如：<br />
<a href="http://www.smashingmagazine.com/">http://www.smashingmagazine.com/</a><br />
<a href="http://www.techcrunch.com/">http://www.techcrunch.com/</a><br />
对于这种文章较多的大型英文网站来说是个不错的选择。	</p>
<p>象我这种比较喜欢走极端的也挺多，只使用文章名：</p>
<blockquote><p>
/%postname%/
</p></blockquote>
<p>如：<br />
<a href="http://phpstone.com">http://phpstone.com</a><br />
<a href="http://css-tricks.com/">http://css-tricks.com/</a><br />
<a href="http://davidwalsh.name/">http://davidwalsh.name/</a><br />
短链接自然有它的好处，象本站这种发布文章不是很多的站点来说，也是可以采用的，不过对于非英语站点来说，每篇文章的链接都是需要手工编辑的，否则默认显示为本地化语言的链接，而且非英语的WordPress后台编辑界面在添加新文章时，得先保存草稿才会显示Permalink的编辑功能。</p>
<p>&#8230; to be continued</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/phpstone?a=ewMuQuscyMA:nPGAhMPXtmM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/phpstone?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=ewMuQuscyMA:nPGAhMPXtmM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/phpstone?i=ewMuQuscyMA:nPGAhMPXtmM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=ewMuQuscyMA:nPGAhMPXtmM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/phpstone?i=ewMuQuscyMA:nPGAhMPXtmM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=ewMuQuscyMA:nPGAhMPXtmM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/phpstone?i=ewMuQuscyMA:nPGAhMPXtmM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=ewMuQuscyMA:nPGAhMPXtmM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/phpstone?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://phpstone.com/using-permalink-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpstone.com/using-permalink-in-wordpress/</feedburner:origLink></item>
		<item>
		<title>更新并使用Firestats1.60</title>
		<link>http://feedproxy.google.com/~r/phpstone/~3/2lRrOBO0mck/</link>
		<comments>http://phpstone.com/update-and-use-firestats1-60/#comments</comments>
		<pubDate>Sat, 09 May 2009 16:04:16 +0000</pubDate>
		<dc:creator>frePerl</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.phpstone.com/?p=194</guid>
		<description><![CDATA[Firestats是一个网站流量统计系统，基于PHP+MySQL。它是一个独立的系统，可以直接安装使用，也可以作为WordPress的一个插件（Plugin）程序来安装。
近期最新的Stable version: 1.6.0-stable
我从旧版本进行升级安装，先禁用Firestats插件，上传安装程序，用新文件覆盖旧文件，然后激活插件时出现错误提示如下：
Error installing FireStats tables: Failed to lock mutex, see This for more information :
Error message: Error locking /home/phpst0/public_html/blog/wp-content/plugins/firestats/php/db-setup.php
Firestats.cc Wiki上已经通告了问题的原因和解决办法：
大致是PHP的旧版本无法实现flock这个PHP函数的功能，因此解决办法是升级服务器的PHP程序版本；对于实在无法升级PHP服务端的情况，也提供了一种并不推荐的解决办法：
将firestats程序根目录下的“sample-conf.php”复制为“conf.php”,并编辑之将下列行的注释去掉：

define(&#039;DISABLE_MUTEX&#039;,true);

处理之后成功启用插件。
接着进入Firefox插件的设置页面进行数据库的更新即可。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://firestats.cc/" target="_blank">Firestats</a>是一个网站流量统计系统，基于PHP+MySQL。它是一个独立的系统，可以直接安装使用，也可以作为WordPress的一个插件（Plugin）程序来安装。</p>
<p>近期最新的Stable version: 1.6.0-stable</p>
<p>我从旧版本进行升级安装，先禁用Firestats插件，上传安装程序，用新文件覆盖旧文件，然后激活插件时出现错误提示如下：<span id="more-194"></span></p>
<blockquote><p>Error installing FireStats tables: Failed to lock mutex, see This for more information :<br />
Error message: Error locking /home/phpst0/public_html/blog/wp-content/plugins/firestats/php/db-setup.php</p></blockquote>
<p><a href="http://firestats.cc/wiki/Mutex" target="_blank">Firestats.cc Wiki</a>上已经通告了问题的原因和解决办法：</p>
<p>大致是PHP的旧版本无法实现flock这个PHP函数的功能，因此解决办法是升级服务器的PHP程序版本；对于实在无法升级PHP服务端的情况，也提供了一种并不推荐的解决办法：</p>
<p>将firestats程序根目录下的“sample-conf.php”复制为“conf.php”,并编辑之将下列行的注释去掉：</p>
<pre class="brush: php; ">
define(&#039;DISABLE_MUTEX&#039;,true);
</pre>
<p>处理之后成功启用插件。<br />
接着进入Firefox插件的设置页面进行数据库的更新即可。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/phpstone?a=2lRrOBO0mck:OQpIcFGJlyU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/phpstone?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=2lRrOBO0mck:OQpIcFGJlyU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/phpstone?i=2lRrOBO0mck:OQpIcFGJlyU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=2lRrOBO0mck:OQpIcFGJlyU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/phpstone?i=2lRrOBO0mck:OQpIcFGJlyU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=2lRrOBO0mck:OQpIcFGJlyU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/phpstone?i=2lRrOBO0mck:OQpIcFGJlyU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=2lRrOBO0mck:OQpIcFGJlyU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/phpstone?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://phpstone.com/update-and-use-firestats1-60/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpstone.com/update-and-use-firestats1-60/</feedburner:origLink></item>
		<item>
		<title>遵循W3C修改引用的HTML代码实例</title>
		<link>http://feedproxy.google.com/~r/phpstone/~3/FdbFT9VSLh8/</link>
		<comments>http://phpstone.com/change-html-code-to-follow-w3c/#comments</comments>
		<pubDate>Sat, 09 May 2009 15:57:22 +0000</pubDate>
		<dc:creator>frePerl</dc:creator>
				<category><![CDATA[说点什么]]></category>

		<guid isPermaLink="false">http://blog.phpstone.com/?p=192</guid>
		<description><![CDATA[多数的网站或者博客中，都会引用一些其他网站提供的代码，以实现一些功能或者动态的广告条目，但直接复制用来的话，会发现部分代码就会导致很多的HTML校验错误，因此有必要注意一下代码的规范性。
1.Twitter网站生成的侧边栏代码里包含如下不符合标准：


&#60;ul id=&#34;twitter_update_list&#34;&#62;&#60;/ul&#62;

话说如“ &#60;head&#62;”之类的元素必须包含一个“&#60;title&#62;”子元素，名单的 (ul, ol, dl)等必须包含一个子项(li,or dt, dd)等等，于是这样处理通过校验：


&#60;ul id=&#34;twitter_update_list&#34;&#62;&#60;li&#62;&#60;/li&#62;&#60;/ul&#62;

不过添加的标签可能会使放置位置的某些样式发生变化，需要按实际情况处理。

2.Yupoo网站自动生成的侧边栏代码包含如下不符合标准：


&#60;script type=&#34;text/javascript&#34; language=&#34;javascript&#34; src=&#34;http://www.yupoo.com/photos/gen_badge?userid=ff80808119321c500119335a860224f4&#38;type=1&#38;source=user&#38;mysource=mytags&#38;tags=sidebar&#38;count=6&#38;line=2&#38;size=s&#38;icon=hide&#38;direction=horizontal&#38;boxSize=400&#34;&#62;
&#60;/script&#62;

校验时提示：

&#8230;cannot generate system identifier for general entity &#8220;source&#8221;
 An entity reference was found in the document, but there is no reference by that name defined. Often this is caused by misspelling the reference name, unencoded ampersands, or by leaving off the trailing semicolon (;). [...]]]></description>
			<content:encoded><![CDATA[<p>多数的网站或者博客中，都会引用一些其他网站提供的代码，以实现一些功能或者动态的广告条目，但直接复制用来的话，会发现部分代码就会导致很多的HTML校验错误，因此有必要注意一下代码的规范性。</p>
<p>1.Twitter网站生成的侧边栏代码里包含如下不符合标准：</p>
<pre class="brush: xhtml; ">

&lt;ul id=&quot;twitter_update_list&quot;&gt;&lt;/ul&gt;
</pre>
<p>话说如“ &lt;head&gt;”之类的元素必须包含一个“&lt;title&gt;”子元素，名单的 (ul, ol, dl)等必须包含一个子项(li,or dt, dd)等等，于是这样处理通过校验：</p>
<pre class="brush: xhtml; ">

&lt;ul id=&quot;twitter_update_list&quot;&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;
</pre>
<p>不过添加的标签可能会使放置位置的某些样式发生变化，需要按实际情况处理。<br />
<span id="more-192"></span><br />
2.Yupoo网站自动生成的侧边栏代码包含如下不符合标准：</p>
<pre class="brush: js; ">

&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;http://www.yupoo.com/photos/gen_badge?userid=ff80808119321c500119335a860224f4&amp;type=1&amp;source=user&amp;mysource=mytags&amp;tags=sidebar&amp;count=6&amp;line=2&amp;size=s&amp;icon=hide&amp;direction=horizontal&amp;boxSize=400&quot;&gt;
&lt;/script&gt;
</pre>
<p>校验时提示：</p>
<blockquote><p>
&#8230;cannot generate system identifier for general entity &#8220;source&#8221;</p>
<p> An entity reference was found in the document, but there is no reference by that name defined. Often this is caused by misspelling the reference name, unencoded ampersands, or by leaving off the trailing semicolon (;). The most common cause of this error is unencoded ampersands in URLs as described by the WDG in &#8220;Ampersands in URLs&#8221;.</p>
<p>Entity references start with an ampersand (&#038;) and end with a semicolon (;). If you want to use a literal ampersand in your document you must encode it as &#8220;&amp;amp;&#8221; (even inside URLs!).
</p></blockquote>
<p>一些链接脚本内的&amp;符号不符合标准，必须全部替换为&amp;amp;，这是很多外链脚本与广告脚本里常常出现的问题，必须想办法将原文件替换。</p>
<p>&#8230; to be continued.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/phpstone?a=FdbFT9VSLh8:ROOX8Sd4qoE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/phpstone?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=FdbFT9VSLh8:ROOX8Sd4qoE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/phpstone?i=FdbFT9VSLh8:ROOX8Sd4qoE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=FdbFT9VSLh8:ROOX8Sd4qoE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/phpstone?i=FdbFT9VSLh8:ROOX8Sd4qoE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=FdbFT9VSLh8:ROOX8Sd4qoE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/phpstone?i=FdbFT9VSLh8:ROOX8Sd4qoE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=FdbFT9VSLh8:ROOX8Sd4qoE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/phpstone?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://phpstone.com/change-html-code-to-follow-w3c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpstone.com/change-html-code-to-follow-w3c/</feedburner:origLink></item>
		<item>
		<title>规划你自己的学习方法</title>
		<link>http://feedproxy.google.com/~r/phpstone/~3/20U1P7pTO_M/</link>
		<comments>http://phpstone.com/your-own-study-method-planning/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 06:13:58 +0000</pubDate>
		<dc:creator>frePerl</dc:creator>
				<category><![CDATA[说点什么]]></category>

		<guid isPermaLink="false">http://blog.phpstone.com/?p=187</guid>
		<description><![CDATA[在古代，从有了人才选拔制度开始，都是勤奋刻苦地预学大量的知识，然后到使用时方从大脑这个数据库中提取，因此有了才高八斗，学富五车之说。然而，以前的学习方法，现在已经不适用了，不是吗？
现在厚积薄发的概念，应该是有针对性的领域或者专业了，因为人毕竟不是计算机，任谁都无法那么快那么多地存储信息。唯有用一种集中式的学习方法，才能让自己在有限的时间里做到最快速的成长。如果说，商人，就是在最短的时间内获得最大的利益；那么，技术员就应该在最短的时间内取得最大的效率。不管是在学习的进行时，还是在工做的项目之中。而且，“效率”的概念，是说是在保证质量的同时最大限度地提高速度。
以前我一直把系统管理作为发展方向，从Linux到FreeBSD，现在却开始转向PHP开发，等于我是在毕业并且工作了两年以后开始转型，现在的我，是个PHP开发方面的新手，我所面临的学习任务，比其他人又要多的多，如果我按部就班地来学习的话，前进速度可想而知的缓慢。我不能什么都从头开始，而要了解自己，并懂得利用现有的资源。
我的现有资源是，大学里学过C语言，由于PHP与C语言有很多的共通性，我可以很快地切入，比如有些简单的代码我可以直接阅读与调试，并不需要把PHP基础知识从头到尾通读一遍，遇到不懂的细节，再去仔细研读与参考。不能一味地去阅读大量的书籍，更好的方式是针对性的去阅读好的文章，把一个方面读懂、吃透，接下来就不会那么容易忘掉了。
笔记方面，千万不能像在学习里一样什么都记了，最好的东西应该直接存入大脑，而一些基础性的东西，不太好记忆的，如php.ini相关实用的详细配置内容，可以记载在笔记本上随时翻阅强化记忆。
用懂得舍得，作为90%以上不是天才的我们，不可能学所有的东西，做一个全才，大多数的人们能做到一个专才已经不错了，我得舍弃不相关的哪怕是我很喜爱的东西，不能把时间分散了来花。
不能好面子，不能喜欢在别人面前表现自己懂得很多，因为这样会让我迷失方向，一味求多。
]]></description>
			<content:encoded><![CDATA[<p>在古代，从有了人才选拔制度开始，都是勤奋刻苦地预学大量的知识，然后到使用时方从大脑这个数据库中提取，因此有了才高八斗，学富五车之说。然而，以前的学习方法，现在已经不适用了，不是吗？</p>
<p>现在厚积薄发的概念，应该是有针对性的领域或者专业了，因为人毕竟不是计算机，任谁都无法那么快那么多地存储信息。唯有用一种集中式的学习方法，才能让自己在有限的时间里做到最快速的成长。如果说，商人，就是在最短的时间内获得最大的利益；那么，技术员就应该在最短的时间内取得最大的效率。不管是在学习的进行时，还是在工做的项目之中。而且，“效率”的概念，是说是在保证质量的同时最大限度地提高速度。<span id="more-187"></span></p>
<p>以前我一直把系统管理作为发展方向，从Linux到FreeBSD，现在却开始转向PHP开发，等于我是在毕业并且工作了两年以后开始转型，现在的我，是个PHP开发方面的新手，我所面临的学习任务，比其他人又要多的多，如果我按部就班地来学习的话，前进速度可想而知的缓慢。我不能什么都从头开始，而要了解自己，并懂得利用现有的资源。</p>
<p>我的现有资源是，大学里学过C语言，由于PHP与C语言有很多的共通性，我可以很快地切入，比如有些简单的代码我可以直接阅读与调试，并不需要把PHP基础知识从头到尾通读一遍，遇到不懂的细节，再去仔细研读与参考。不能一味地去阅读大量的书籍，更好的方式是针对性的去阅读好的文章，把一个方面读懂、吃透，接下来就不会那么容易忘掉了。</p>
<p>笔记方面，千万不能像在学习里一样什么都记了，最好的东西应该直接存入大脑，而一些基础性的东西，不太好记忆的，如php.ini相关实用的详细配置内容，可以记载在笔记本上随时翻阅强化记忆。</p>
<p>用懂得舍得，作为90%以上不是天才的我们，不可能学所有的东西，做一个全才，大多数的人们能做到一个专才已经不错了，我得舍弃不相关的哪怕是我很喜爱的东西，不能把时间分散了来花。</p>
<p>不能好面子，不能喜欢在别人面前表现自己懂得很多，因为这样会让我迷失方向，一味求多。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/phpstone?a=20U1P7pTO_M:fzZrMIIjAhc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/phpstone?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=20U1P7pTO_M:fzZrMIIjAhc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/phpstone?i=20U1P7pTO_M:fzZrMIIjAhc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=20U1P7pTO_M:fzZrMIIjAhc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/phpstone?i=20U1P7pTO_M:fzZrMIIjAhc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=20U1P7pTO_M:fzZrMIIjAhc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/phpstone?i=20U1P7pTO_M:fzZrMIIjAhc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/phpstone?a=20U1P7pTO_M:fzZrMIIjAhc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/phpstone?d=qj6IDK7rITs" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://phpstone.com/your-own-study-method-planning/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://phpstone.com/your-own-study-method-planning/</feedburner:origLink></item>
	</channel>
</rss>
