<?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>焦秋野 &#124; 关注网站设计,前端资讯,用户体验,SEO,网站设计 &#187; PHP</title>
	<atom:link href="http://www.imjqy.com/category/php-xml/feed" rel="self" type="application/rss+xml" />
	<link>http://www.imjqy.com</link>
	<description></description>
	<lastBuildDate>Wed, 01 Feb 2012 00:17:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>帝国数据库修改密码无效？</title>
		<link>http://www.imjqy.com/php-xml/%e5%b8%9d%e5%9b%bd%e6%95%b0%e6%8d%ae%e5%ba%93%e4%bf%ae%e6%94%b9%e5%af%86%e7%a0%81%e6%97%a0%e6%95%88%ef%bc%9f</link>
		<comments>http://www.imjqy.com/php-xml/%e5%b8%9d%e5%9b%bd%e6%95%b0%e6%8d%ae%e5%ba%93%e4%bf%ae%e6%94%b9%e5%af%86%e7%a0%81%e6%97%a0%e6%95%88%ef%bc%9f#comments</comments>
		<pubDate>Sat, 19 Feb 2011 01:50:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.imjqy.com/?p=696</guid>
		<description><![CDATA[5.0及以前版本：用phpmyadmin修改phome_enewsuser表，把password字段de值设为：e10adc3949ba59abbe56e057f20f883e 密码就是：123456 5.1版本：用phpmyadmin修改phome_enewsuser表里de记录：把password字段de值设为：“322d3fef02fc39251436cb4522d29a71”；把salt字段de值设为：“abc”. 密码就是：123456 5.0及以前版本：用phpmyadmin修改phome_enewsuser表，把password字段de值设为：e10adc3949ba59abbe56e057f20f883e 密码就是：123456 5.1版本：用phpmyadmin修改phome_enewsuser表里de记录：把password字段de值设为：“322d3fef02fc39251436cb4522d29a71”；把salt字段de值设为：“abc”. 密码就是：123456]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste">5.0及以前版本：用phpmyadmin修改phome_enewsuser表，把password字段de值设为：e10adc3949ba59abbe56e057f20f883e</div>
<div id="_mcePaste">密码就是：123456</div>
<div id="_mcePaste">5.1版本：用phpmyadmin修改phome_enewsuser表里de记录：把password字段de值设为：“322d3fef02fc39251436cb4522d29a71”；把salt字段de值设为：“abc”.</div>
<div id="_mcePaste">密码就是：123456</div>
<p>5.0及以前版本：用phpmyadmin修改phome_enewsuser表，把password字段de值设为：e10adc3949ba59abbe56e057f20f883e<br />
密码就是：123456<br />
5.1版本：用phpmyadmin修改phome_enewsuser表里de记录：把password字段de值设为：“322d3fef02fc39251436cb4522d29a71”；把salt字段de值设为：“abc”.<br />
密码就是：123456</p>
]]></content:encoded>
			<wfw:commentRss>http://www.imjqy.com/php-xml/%e5%b8%9d%e5%9b%bd%e6%95%b0%e6%8d%ae%e5%ba%93%e4%bf%ae%e6%94%b9%e5%af%86%e7%a0%81%e6%97%a0%e6%95%88%ef%bc%9f/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>dedecms栏目高亮</title>
		<link>http://www.imjqy.com/php-xml/dedecms%e6%a0%8f%e7%9b%ae%e9%ab%98%e4%ba%ae</link>
		<comments>http://www.imjqy.com/php-xml/dedecms%e6%a0%8f%e7%9b%ae%e9%ab%98%e4%ba%ae#comments</comments>
		<pubDate>Fri, 22 Oct 2010 06:40:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.imjqy.com/?p=619</guid>
		<description><![CDATA[栏目首页css &#60;style type=”text/css”&#62; &#60;!&#8211; #nav .tab{dede:field name=&#8217;ID&#8217;/} a { background: url(/img/tab0.gif) no-repeat left bottom; } #sidenav .tab{dede:field name=&#8217;ID&#8217;/} a{ background: url(/img/sidenav_on.gif) left bottom no-repeat; } &#8211;&#62; &#60;/style&#62; 列表页和内容页css &#60;!&#8211; #nav .tab{dede:field name=&#8217;reID&#8217;/} a { background: url(/img/tab0.gif) no-repeat left bottom; } &#8230; <a href="http://www.imjqy.com/php-xml/dedecms%e6%a0%8f%e7%9b%ae%e9%ab%98%e4%ba%ae">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>栏目首页css</strong><br />
&lt;style type=”text/css”&gt;<br />
&lt;!&#8211;<br />
#nav .tab{dede:field name=&#8217;ID&#8217;/} a {<br />
background: url(/img/tab0.gif) no-repeat left bottom;<br />
}<br />
#sidenav .tab{dede:field name=&#8217;ID&#8217;/} a{<br />
background: url(/img/sidenav_on.gif) left bottom no-repeat;<br />
}<br />
&#8211;&gt;<br />
&lt;/style&gt;</p>
<p><span id="more-619"></span></p>
<p><strong>列表页和内容页css</strong><br />
&lt;!&#8211;<br />
#nav .tab{dede:field name=&#8217;reID&#8217;/} a {<br />
background: url(/img/tab0.gif) no-repeat left bottom;<br />
}<br />
#sidenav .tab{dede:field name=&#8217;ID&#8217;/} a{<br />
background: url(/img/sidenav_on.gif) left bottom no-repeat;<br />
}<br />
&#8211;&gt;<br />
&lt;/style&gt;</p>
<p><strong>栏目列表调用加上class的值为当然栏目id</strong></p>
<p>{dede:channel row=&#8217;20&#8242; type=&#8217;self&#8217;}<br />
&lt;li&gt;&lt;a href=&#8217;[field:typelink /]&#8216;&gt;[field:typename/]&lt;/a&gt;&lt;/li&gt;<br />
{/dede:channel}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.imjqy.com/php-xml/dedecms%e6%a0%8f%e7%9b%ae%e9%ab%98%e4%ba%ae/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>VIM用法</title>
		<link>http://www.imjqy.com/php-xml/how_to_use_vim7-2</link>
		<comments>http://www.imjqy.com/php-xml/how_to_use_vim7-2#comments</comments>
		<pubDate>Thu, 19 Aug 2010 08:16:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[VIM7.2]]></category>

		<guid isPermaLink="false">http://www.imjqy.com/?p=563</guid>
		<description><![CDATA[  三种状态 Command： 任何输入都会作为编辑命令，而不会出现在屏幕上，任何输入都引起立即反映 Insert： 任何输入的数据都置于编辑寄存器，按ESC，可跳回command方式 Escape： 以“：”或者“/”为前导的指令，出现在屏幕的最下一行，任何输入都被当成特别指令。 离开vi :q! 离开vi，并放弃刚在缓冲区内编辑的内容。 :wq 将缓冲区内的资料写入磁盘中，并离开vi。 同wq。 （注意—— :X 是文件加密，一定要与:x存盘退出相区别） 进入输入模式 a (append) 由游标之后加入资料。 A 由该行之末加入资料。 i (insert) 由游标之前加入资料。 I 由该行之首加入资料。 o (open) 新增一行於该行之下供输入资料之用。 O 新增一行於该行之上供输入资料之用。 删除与修改 x 删除游标所在该字元。 X 删除游标所在之前一字元。 r 用接於此指令之后的字元取代(replace)游标所在字元。如：ra将游标所在字元以 &#8230; <a href="http://www.imjqy.com/php-xml/how_to_use_vim7-2">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p> </p>
<p><a href="http://www.imjqy.com/wp-content/uploads/2010/08/VIM.jpg"><img class="aligncenter size-medium wp-image-564" title="VIM" src="http://www.imjqy.com/wp-content/uploads/2010/08/VIM-300x220.jpg" alt="" width="300" height="220" /></a></p>
<p><span id="more-563"></span></p>
<ul>
<li>三种状态</li>
</ul>
<p>Command： 任何输入都会作为编辑命令，而不会出现在屏幕上，任何输入都引起立即反映<br />
Insert： 任何输入的数据都置于编辑寄存器，按ESC，可跳回command方式<br />
Escape： 以“：”或者“/”为前导的指令，出现在屏幕的最下一行，任何输入都被当成特别指令。</p>
<ul>
<li>离开vi</li>
</ul>
<p>:q! 离开vi，并放弃刚在缓冲区内编辑的内容。<br />
:wq 将缓冲区内的资料写入磁盘中，并离开vi。<br />
 <img src='http://www.imjqy.com/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  同wq。<br />
（注意—— :X 是文件加密，一定要与:x存盘退出相区别）</p>
<ul>
<li>进入输入模式</li>
</ul>
<p>a (append) 由游标之后加入资料。<br />
A 由该行之末加入资料。<br />
i (insert) 由游标之前加入资料。<br />
I 由该行之首加入资料。<br />
o (open) 新增一行於该行之下供输入资料之用。<br />
O 新增一行於该行之上供输入资料之用。</p>
<ul>
<li>删除与修改</li>
</ul>
<p>x 删除游标所在该字元。<br />
X 删除游标所在之前一字元。<br />
r 用接於此指令之后的字元取代(replace)游标所在字元。如：ra将游标所在字元以 a 取代之。<br />
R 进入取代状态，直到《ESC》为止。<br />
s 删除游标所在之字元，并进入输入模式直到《ESC》。<br />
S 删除游标所在之该行资料，并进入输入模式直到《ESC》。</p>
<ul>
<li>光标的移动</li>
</ul>
<p>m&lt;a-z&gt; 设置书签&lt;a-z&gt;<br />
‘&lt;a-z&gt; 移至书签&lt;a-z&gt;处<br />
0 移至该行之首<br />
$ 移至该行之末。<br />
e 移动到下个字的最後一个字母<br />
w 移动到下个字的第一个字母。<br />
b 移动到上个字的第一个字母。<br />
^ 移至该行的第一个字元处。<br />
H 移至视窗的第一行。<br />
M 移至视窗的中间那行。<br />
L 移至视窗的最后一行。<br />
G 移至该文件的最后一行。<br />
+ 移至下一列的第一个字元处。<br />
- 移至上一列的第一个字元处。<br />
:n 移至该文件的第 n 列。<br />
n+ 移至游标所在位置之后的第 n 列。<br />
n- 移至游标所在位置之前的第 n 列。<br />
&lt;Ctrl&gt;&lt;g&gt; 显示该行之行号、文件名称、文件中最末行之行号、游标所在行号占总行号之百分比。</p>
<p>（Vim） 光标移动基本用法小解：<br />
(这只要组合上边的功能就可以明白了，不用再一一讲解了吧！)<br />
ge b w e<br />
← ← &#8212;→ &#8211;→<br />
This is-a line, with special/separated/words (and some more).<br />
←- ←&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;→ &#8212;→<br />
GE B W E</p>
<ul>
<li>视窗的移动</li>
</ul>
<p>&lt;Ctrl&gt;&lt;f&gt; 视窗往下卷一页。<br />
&lt;Ctrl&gt;&lt;b&gt; 视窗往上卷一页。<br />
&lt;Ctrl&gt;&lt;d&gt; 视窗往下卷半页。<br />
&lt;Ctrl&gt;&lt;u&gt; 视窗往上卷半页。<br />
&lt;Ctrl&gt;&lt;e&gt; 视窗往下卷一行。<br />
&lt;Ctrl&gt;&lt;y&gt; 视窗往上卷一行。</p>
<ul>
<li>剪切、复制、删除</li>
</ul>
<p>Operator + Scope = command<br />
<strong>Operator</strong><br />
d 剪切<br />
y 复制。<br />
p 粘帖，与 d 和 y 配和使用。可将最后d或y的资料放置於游标所在位置之行列下。<br />
c 修改，类似delete与insert的组和。删除一个字组、句子等之资料，并插入新建资料。<br />
<strong>Scope<br />
</strong>e 由游标所在位置至该字串的最后一个字元。<br />
w 由游标所在位置至下一个字串的第一个字元。<br />
b 由游标所在位置至前一个字串的第一个字元。<br />
$ 由游标所在位置至该行的最后一个字元。<br />
0 由游标所在位置至该行的第一个字元。</p>
<ul>
<li>整行动作</li>
</ul>
<p>dd 删除整行。<br />
D 以行为单位，删除游标后之所有字元。<br />
cc 修改整行的内容。<br />
yy 使游标所在该行复制到记忆体缓冲区。</p>
<ul>
<li>取消前一动作(Undo)</li>
</ul>
<p>u 恢复最后一个指令之前的结果。<br />
U 恢复游标该行之所有改变。<br />
(vim) u 可以多次撤消指令，一次撤消一个操作，直至本次操作开始为止。<br />
(vim) Ctrl+r 可以恢复撤消前内容，按多次可恢复多次。</p>
<ul>
<li>查找与替换</li>
</ul>
<p>/字串 往游标之后寻找该字串。<br />
?字串 往游标之前寻找该字串。<br />
n 往下继续寻找下一个相同的字串。<br />
N 往上继续寻找下一个相同的字串。<br />
% 查找“(”，“)”，“{”，“}”的配对符。<br />
s 搜寻某行列范围。<br />
g 搜寻整个编辑缓冲区的资料。<br />
:1,$s/old/new/g 将文件中所有的『old』改成『new』。<br />
:10,20s/^/ / 将第10行至第20行资料的最前面插入5个空白。<br />
(vim)<br />
/字符串 后边输入查询内容可保存至缓冲区中，可用↑↓进行以往内容选择。<br />
另外：将光标移动在选定单词下方按*，则可以选中此单词作为查询字符，可以避免输入一长串字符的麻烦。</p>
<ul>
<li>(vim) 大小写替换</li>
</ul>
<p>首先用按v开启选择功能，然后用↑↓←→键来选定所要替换的字符，若是小写变大写，则按U;反之按u;<br />
如果是选择单词，则可以在按v后，按w，最后按U/u,这样就可以将字符随意的改变大小写了，而不用删除后重新敲入。</p>
<ul>
<li>资料的连接</li>
</ul>
<p>J 句子的连接。将游标所在之下一行连接至游标该行的后面。</p>
<ul>
<li>环境的设定</li>
</ul>
<p>:set all 可设置的环境变量列表<br />
:set 环境变量的当前值<br />
:set nu 设定资料的行号。<br />
:set nonu 取消行号设定。<br />
:set ai 自动内缩。<br />
:set noai 取消自动内缩。<br />
(vim)<br />
:set ruler 会在屏幕右下角显示当前光标所处位置，并随光移动而改变，占用屏幕空间较小，使用也比较方便，推荐使用。<br />
:set hlsearch 在使用查找功能时，会高亮显示所有匹配的内容。<br />
:set nohlsearch 关闭此功能。<br />
:set incsearch 使Vim在输入字符串的过程中，光标就可定位显示匹配点。<br />
:set nowrapscan 关闭查找自动回环功能，即查找到文件结尾处，结束查找；默认状态是自动回环</p>
<ul>
<li>ex指令</li>
</ul>
<ul>
<li>读写资料</li>
</ul>
<p>:10,20w test 将第10行至第20行的资料写入test文件。<br />
:10,20w&gt;&gt;test 将第10行至第20行的资料加在test文件之后。<br />
:r test 将test文件的资料读入编辑缓冲区的最后。<br />
:e [filename] 编辑新的文件。<br />
:e! [filename] 放弃当前修改的文件，编辑新的文件。<br />
:sh 进入shell环境，使用exit退出，回到编辑器中。</p>
<p>:!cmd 运行命令cmd后，返回到编辑器中。</p>
<ul>
<li>删除、复制及搬移</li>
</ul>
<p>:10,20d 删除第10行至第20行的资料。<br />
:10d 删除第10行的资料。<br />
:%d 删除整个编辑缓冲区。<br />
:10,20co30 将第10行至第20行的资料复制至第30行之后。<br />
:10,20mo30 将第10行至第20行的资料搬移至第30行之后。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.imjqy.com/php-xml/how_to_use_vim7-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>提高PHP编程效率的53个要点</title>
		<link>http://www.imjqy.com/php-xml/%e6%8f%90%e9%ab%98php%e7%bc%96%e7%a8%8b%e6%95%88%e7%8e%87%e7%9a%8453%e4%b8%aa%e8%a6%81%e7%82%b9</link>
		<comments>http://www.imjqy.com/php-xml/%e6%8f%90%e9%ab%98php%e7%bc%96%e7%a8%8b%e6%95%88%e7%8e%87%e7%9a%8453%e4%b8%aa%e8%a6%81%e7%82%b9#comments</comments>
		<pubDate>Fri, 13 Aug 2010 06:08:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.imjqy.com/php-xml/%e6%8f%90%e9%ab%98php%e7%bc%96%e7%a8%8b%e6%95%88%e7%8e%87%e7%9a%8453%e4%b8%aa%e8%a6%81%e7%82%b9</guid>
		<description><![CDATA[用单引号代替双引号来包含字符串，这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量，单引号则不会，注意：只有echo能这么做，它是一种可以把多个字符串当作参数的“函数”（译注：PHP手册中说echo是语言结构，不是真正的函数，故把函数加上了双引号）。 1、如果能将类的方法定义成static，就尽量定义成static，它的速度会提升将近4倍。 2、$row[’id’] 的速度是$row[id]的7倍。 3、echo 比 print 快，并且使用echo的多重参数（译注：指用逗号而不是句点）代替字符串连接，比如echo $str1,$str2。 4、在执行for循环之前确定最大循环数，不要每循环一次都计算最大值，最好运用foreach代替。 5、注销那些不用的变量尤其是大数组，以便释放内存。 6、尽量避免使用__get，__set，__autoload。 7、require_once()代价昂贵。 8、include文件时尽量使用绝对路径，因为它避免了PHP去include_path里查找文件的速度，解析操作系统路径所需的时间会更少。 9、如果你想知道脚本开始执行（译注：即服务器端收到客户端请求）的时刻，使用$_SERVER[‘REQUEST_TIME’]要好于time()。 10、函数代替正则表达式完成相同功能。 11、str_replace函数比preg_replace函数快，但strtr函数的效率是str_replace函数的四倍。 12、如果一个字符串替换函数，可接受数组或字符作为参数，并且参数长度不太长，那么可以考虑额外写一段替换代码，使得每次传递参数是一个字符，而不是只写一行代码接受数组作为查询和替换的参数。 13、使用选择分支语句（译注：即switch case）好于使用多个if，else if语句。 14、用@屏蔽错误消息的做法非常低效，极其低效。 15、打开apache的mod_deflate模块，可以提高网页的浏览速度。 16、数据库连接当使用完毕时应关掉，不要用长连接。 17、错误消息代价昂贵。 18、在方法中递增局部变量，速度是最快的。几乎与在函数中调用局部变量的速度相当。 19、递增一个全局变量要比递增一个局部变量慢2倍。 20、递增一个对象属性（如：$this-&#62;prop++）要比递增一个局部变量慢3倍。 21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。 22、仅定义一个局部变量而没在函数中调用它，同样会减慢速度（其程度相当于递增一个局部变量）。PHP大概会检查看是否存在全局变量。 23、方法调用看来与类中定义的方法的数量无关，因为我（在测试方法之前和之后都）添加了10个方法，但性能上没有变化。 24、派生类中的方法运行起来要快于在基类中定义的同样的方法。 25、调用带有一个参数的空函数，其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。 26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面，少用脚本。 27、除非脚本可以缓存，否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能，以免除编译开销。 28、尽量做缓存，可使用memcached。memcached是一款高性能的内存对象缓存系统，可用来加速动态Web应用程序，减轻数据库负载。对运算码 (OP code)的缓存很有用，使得脚本不必为每个请求做重新编译。 29、当操作字符串并需要检验其长度是否满足某种要求时，你想当然地会使用strlen()函数。此函数执行起来相当快，因为它不做任何计算，只返回在zval 结构（C的内置数据结构，用于存储PHP变量）中存储的已知字符串长度。但是，由于strlen()是函数，多多少少会有些慢，因为函数调用会经过诸多步骤，如字母小写化（译注：指函数名小写化，PHP不区分函数名大小写）、哈希查找，会跟随被调用的函数一起执行。在某些情况下，你可以使用isset() &#8230; <a href="http://www.imjqy.com/php-xml/%e6%8f%90%e9%ab%98php%e7%bc%96%e7%a8%8b%e6%95%88%e7%8e%87%e7%9a%8453%e4%b8%aa%e8%a6%81%e7%82%b9">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>用单引号代替双引号来包含字符串，这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量，单引号则不会，注意：只有echo能这么做，它是一种可以把多个字符串当作参数的“函数”（译注：PHP手册中说echo是语言结构，不是真正的函数，故把函数加上了双引号）。</p>
<p><span id="more-551"></span></p>
<p>1、如果能将类的方法定义成static，就尽量定义成static，它的速度会提升将近4倍。</p>
<p>2、$row[’id’] 的速度是$row[id]的7倍。</p>
<p>3、echo 比 print 快，并且使用echo的多重参数（译注：指用逗号而不是句点）代替字符串连接，比如echo $str1,$str2。</p>
<p>4、在执行for循环之前确定最大循环数，不要每循环一次都计算最大值，最好运用foreach代替。</p>
<p>5、注销那些不用的变量尤其是大数组，以便释放内存。</p>
<p>6、尽量避免使用__get，__set，__autoload。</p>
<p>7、require_once()代价昂贵。</p>
<p>8、include文件时尽量使用绝对路径，因为它避免了PHP去include_path里查找文件的速度，解析操作系统路径所需的时间会更少。</p>
<p>9、如果你想知道脚本开始执行（译注：即服务器端收到客户端请求）的时刻，使用$_SERVER[‘REQUEST_TIME’]要好于time()。</p>
<p>10、函数代替正则表达式完成相同功能。</p>
<p>11、str_replace函数比preg_replace函数快，但strtr函数的效率是str_replace函数的四倍。</p>
<p>12、如果一个字符串替换函数，可接受数组或字符作为参数，并且参数长度不太长，那么可以考虑额外写一段替换代码，使得每次传递参数是一个字符，而不是只写一行代码接受数组作为查询和替换的参数。</p>
<p>13、使用选择分支语句（译注：即switch case）好于使用多个if，else if语句。</p>
<p>14、用@屏蔽错误消息的做法非常低效，极其低效。</p>
<p>15、打开apache的mod_deflate模块，可以提高网页的浏览速度。</p>
<p>16、数据库连接当使用完毕时应关掉，不要用长连接。</p>
<p>17、错误消息代价昂贵。</p>
<p>18、在方法中递增局部变量，速度是最快的。几乎与在函数中调用局部变量的速度相当。</p>
<p>19、递增一个全局变量要比递增一个局部变量慢2倍。</p>
<p>20、递增一个对象属性（如：$this-&gt;prop++）要比递增一个局部变量慢3倍。</p>
<p>21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。</p>
<p>22、仅定义一个局部变量而没在函数中调用它，同样会减慢速度（其程度相当于递增一个局部变量）。PHP大概会检查看是否存在全局变量。</p>
<p>23、方法调用看来与类中定义的方法的数量无关，因为我（在测试方法之前和之后都）添加了10个方法，但性能上没有变化。</p>
<p>24、派生类中的方法运行起来要快于在基类中定义的同样的方法。</p>
<p>25、调用带有一个参数的空函数，其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。</p>
<p>26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面，少用脚本。</p>
<p>27、除非脚本可以缓存，否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能，以免除编译开销。</p>
<p>28、尽量做缓存，可使用memcached。memcached是一款高性能的内存对象缓存系统，可用来加速动态Web应用程序，减轻数据库负载。对运算码 (OP code)的缓存很有用，使得脚本不必为每个请求做重新编译。</p>
<p>29、当操作字符串并需要检验其长度是否满足某种要求时，你想当然地会使用strlen()函数。此函数执行起来相当快，因为它不做任何计算，只返回在zval 结构（C的内置数据结构，用于存储PHP变量）中存储的已知字符串长度。但是，由于strlen()是函数，多多少少会有些慢，因为函数调用会经过诸多步骤，如字母小写化（译注：指函数名小写化，PHP不区分函数名大小写）、哈希查找，会跟随被调用的函数一起执行。在某些情况下，你可以使用isset() 技巧加速执行你的代码。<br />
（举例如下）</p>
<table border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td bgcolor="#ddedfb">if (strlen($foo) &lt; 5) { echo “Foo is too short”$$ }</td>
</tr>
</tbody>
</table>
<p>（与下面的技巧做比较）</p>
<table border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td bgcolor="#ddedfb">if (!isset($foo{5})) { echo “Foo is too short”$$ }</td>
</tr>
</tbody>
</table>
<p>调用isset()恰巧比strlen()快，因为与后者不同的是，isset()作为一种语言结构，意味着它的执行不需要函数查找和字母小写化。也就是说，实际上在检验字符串长度的顶层代码中你没有花太多开销。</p>
<p>34、当执行变量$i的递增或递减时，$i++会比++$i慢一些。这种差异是PHP特有的，并不适用于其他语言，所以请不要修改你的C或Java代码并指望它们能立即变快，没用的。++$i更快是因为它只需要3条指令(opcodes)，$i++则需要4条指令。后置递增实际上会产生一个临时变量，这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种，正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意，因为并不是所有的指令优化器都会做同样的优化处理，并且存在大量没有装配指令优化器的互联网服务提供商（ISPs）和服务器。</p>
<p>35、并不是事必面向对象(OOP)，面向对象往往开销很大，每个方法和对象调用都会消耗很多内存。</p>
<p>36、并非要用类实现所有的数据结构，数组也很有用。</p>
<p>37、不要把方法细分得过多，仔细想想你真正打算重用的是哪些代码？</p>
<p>38、当你需要时，你总能把代码分解成方法。</p>
<p>39、尽量采用大量的PHP内置函数。</p>
<p>40、如果在代码中存在大量耗时的函数，你可以考虑用C扩展的方式实现它们。<br />
41、评估检验(profile)你的代码。检验器会告诉你，代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序，评估检验总体上可以显示出代码的瓶颈。<br />
42、mod_zip可作为Apache模块，用来即时压缩你的数据，并可让数据传输量降低80%。</p>
<p>43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下，尽量用file_get_contents，因为他的效率高得多！但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题；</p>
<p>44、尽量的少进行文件操作，虽然PHP的文件操作效率也不低的；</p>
<p>45、优化Select SQL语句，在可能的情况下尽量少的进行Insert、Update操作(在update上，我被恶批过)；</p>
<p>46、尽可能的使用PHP内部函数（但是我却为了找个PHP里面不存在的函数，浪费了本可以写出一个自定义函数的时间，经验问题啊！）；</p>
<p>47、循环内部不要声明变量，尤其是大变量：对象(这好像不只是PHP里面要注意的问题吧？)；</p>
<p>48、多维数组尽量不要循环嵌套赋值；</p>
<p>49、在可以用PHP内部字符串操作函数的情况下，不要用正则表达式；</p>
<p>50、foreach效率更高，尽量用foreach代替while和for循环；</p>
<p>51、用单引号替代双引号引用字符串；</p>
<p>52、“用i+=1代替i=i+1。符合c/c++的习惯，效率还高”；</p>
<p>53、对global变量，应该用完就unset()掉；</p>
<p>原文地址：<a href="http://www.52blogger.com/archives/578" target="_blank">http://www.52blogger.com/archives/578</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.imjqy.com/php-xml/%e6%8f%90%e9%ab%98php%e7%bc%96%e7%a8%8b%e6%95%88%e7%8e%87%e7%9a%8453%e4%b8%aa%e8%a6%81%e7%82%b9/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP优化</title>
		<link>http://www.imjqy.com/php-xml/php_youhua</link>
		<comments>http://www.imjqy.com/php-xml/php_youhua#comments</comments>
		<pubDate>Fri, 19 Feb 2010 12:13:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[优化]]></category>

		<guid isPermaLink="false">http://www.imjqy.com/?p=132</guid>
		<description><![CDATA[我们在编写程序时，总是想要使自己的程序占用资源最小，运行速度更快，代码量更少。往往我们在追求这些的同时却失去了很多东西。下面我想讲讲我对PHP优化的理解。优化的目的是花最少的代价换来最快的运行速度与最容易维护的代码。 进行大范围的优化，而不是死啃某些程序代码 我这里所说的优化，基本上都是从服务器，Apache,数据库这些方面来进行的优化，而并不是对你的PHP代码加以改进从而提高程序的运行速度，因为比起你将程序中的正则优化为字符串处理函数从而提升程序速度来说，在大范围内进行的优化所需要的代价要比这个小的多，而获得报酬却要丰厚的多。 在非代码处进行优化有以下好处,通常情况下能够大大提高效率, 不会危及到代码的完整性,能够快速部署. 缓存技术 下面来说说常用的缓存技术，通过这些缓存技术能够大大的提高效率 在说到缓存技术的时候不得不提到memcached ，memcached是高效、快速的分布式内存对象缓存系统，主要用于加速 WEB 动态应用程序。 Memcached的原理 memcached 是以守护程序方式运行于一个或多个服务器中，等待接收客户端的连接操作，客户端可以由各种语言编写（例如PHP）。PHP 等客户端在与 memcached 服务建立连接之后，接下来的事情就是存取对象了，每个被存取的对象都有一个唯一的标识符 key，存取操作均通过这个 key 进行，保存到 memcached 中的对象实际上是放置内存中的，并不是保存在 cache 文件中的，这也是为什么 memcached 能够如此高效快速的原因。 说完memcached，下面来说说常用的缓存方法 1、编译与OPCODE缓存 因为PHP是解释型的语言，所以每个PHP文件在运行的时候都需要编译后再执行，同一个文件，不同的用户访问，或者同一个用户不同时间访问同一个文件，每次都需要重新编译然后运行，这样就耗费了大量时间。 通过编译缓存每个文件在修改之后只编译一次这样就减少了文件IO操作，用户访问后机器指令直接从内存中取出并执行而不是从硬盘中读出。 最常见的PHP编译缓存工具有：APC，Accelerator，xcache 关于高级缓存可以参考：http://www.php100.com/html/shipinjiaocheng/PHP100shipinjiaocheng/2010/0201/3897.html 2、全局页面缓存&#8211; Squid Cache Squid Cache（简称为Squid）是一个流行的自由软件（GNU通用公共许可证）的代理服务器和Web缓存服务器，Squid作为网页服务器的前置cache服务器通过缓存相关请求来提高Web服务器的速度 更多介绍请看这里：http://zh.wikipedia.org/wiki/Squid_cache 3、局部缓存之SQL缓存 在大多数应用程序中主要的瓶颈往往可以追溯到数据库的操作中，一般都是因为复杂的数据库查询而耗费了大量时间，而SQL缓存可以大大降低复杂查询造成的负荷。 SQL缓存的例子(使用了memcached扩展) &#8230; <a href="http://www.imjqy.com/php-xml/php_youhua">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>我们在编写程序时，总是想要使自己的程序占用资源最小，运行速度更快，代码量更少。往往我们在追求这些的同时却失去了很多东西。下面我想讲讲我对PHP优化的理解。优化的目的是花最少的代价换来最快的运行速度与最容易维护的代码。<br />
进行大范围的优化，而不是死啃某些程序代码<br />
我这里所说的优化，基本上都是从服务器，Apache,数据库这些方面来进行的优化，而并不是对你的PHP代码加以改进从而提高程序的运行速度，因为比起你将程序中的正则优化为字符串处理函数从而提升程序速度来说，在大范围内进行的优化所需要的代价要比这个小的多，而获得报酬却要丰厚的多。<br />
在非代码处进行优化有以下好处,通常情况下能够大大提高效率, 不会危及到代码的完整性,能够快速部署.<br />
缓存技术<br />
<span id="more-132"></span></p>
<p>下面来说说常用的缓存技术，通过这些缓存技术能够大大的提高效率<br />
在说到缓存技术的时候不得不提到memcached ，memcached是高效、快速的分布式内存对象缓存系统，主要用于加速 WEB 动态应用程序。</p>
<p>Memcached的原理<br />
memcached 是以守护程序方式运行于一个或多个服务器中，等待接收客户端的连接操作，客户端可以由各种语言编写（例如PHP）。PHP 等客户端在与 memcached 服务建立连接之后，接下来的事情就是存取对象了，每个被存取的对象都有一个唯一的标识符 key，存取操作均通过这个 key 进行，保存到 memcached 中的对象实际上是放置内存中的，并不是保存在 cache 文件中的，这也是为什么 memcached 能够如此高效快速的原因。<br />
说完memcached，下面来说说常用的缓存方法<br />
1、编译与OPCODE缓存<br />
因为PHP是解释型的语言，所以每个PHP文件在运行的时候都需要编译后再执行，同一个文件，不同的用户访问，或者同一个用户不同时间访问同一个文件，每次都需要重新编译然后运行，这样就耗费了大量时间。<br />
通过编译缓存每个文件在修改之后只编译一次这样就减少了文件IO操作，用户访问后机器指令直接从内存中取出并执行而不是从硬盘中读出。<br />
最常见的PHP编译缓存工具有：APC，Accelerator，xcache<br />
关于高级缓存可以参考：<a href="http://www.php100.com/html/shipinjiaocheng/PHP100shipinjiaocheng/2010/0201/3897.html">http://www.php100.com/html/shipinjiaocheng/PHP100shipinjiaocheng/2010/0201/3897.html</a></p>
<p>2、全局页面缓存&#8211; Squid Cache<br />
Squid Cache（简称为Squid）是一个流行的自由软件（GNU通用公共许可证）的代理服务器和Web缓存服务器，Squid作为网页服务器的前置cache服务器通过缓存相关请求来提高Web服务器的速度<br />
更多介绍请看这里：<a href="http://zh.wikipedia.org/wiki/Squid_cache" target="_blank">http://zh.wikipedia.org/wiki/Squid_cache</a><br />
3、局部缓存之SQL缓存<br />
在大多数应用程序中主要的瓶颈往往可以追溯到数据库的操作中，一般都是因为复杂的数据库查询而耗费了大量时间，而SQL缓存可以大大降低复杂查询造成的负荷。<br />
SQL缓存的例子(使用了memcached扩展)<br />
代码片段</p>
<p><span style="color: #00ccff;">$key = md5(“some sort of sql query”);</span></p>
<p><span style="color: #00ccff;">if (!($result = memcache_get($key))) {<br />
    $result = $pdo-&gt;query($qry)-&gt;fetchAll();<br />
    // 缓存查询结果一小时<br />
    memcache_set($key, $result, NULL, 3600);<br />
}<br />
</span>4、局部缓存之代码块缓存<br />
为了优化PHP程序，有时候我们不得不优化一个个代码段来减少那么一点点的执行的时间，但是比起优化复杂的不同的PHP代码段还不如通过缓存来直接忽略这些代码段的优化，这样做的好处是<br />
 能够很快的看到效果<br />
 不会破坏以前的代码<br />
 速度要比优化代码要快得多<br />
代码块缓存的列子(同样使用了memcached扩展)<br />
代码片段</p>
<p><span style="color: #00ccff;">function complex_function_abc($a, $b, $c) {<br />
$key = __FUNCTION__ . serialize<br />
(func_get_args());</span></p>
<p><span style="color: #00ccff;">if (!($result = memcache_get($key))) {<br />
    $result = //函数代码<br />
    // 储存执行结果1小时  <br />
    memcache_set($key, $result, NULL, 3600);<br />
}<br />
return $result;<br />
}</span></p>
<p>当然除了上述方法外还可以用到文件缓存（将数据库中的数据取出储存在文件中），还可以生成静态HTML文件等，但是这些方法的缓存还是将文件储存在硬盘上而不是内存中。<br />
输出控制<br />
除了上述缓存技术外还可以通过输出控制来让程序执行的时间更少<br />
下面通过PHP与APACHE来说说输出控制<br />
1、PHP输出控制<br />
这里最主要用到ob_start()以及PHP中的OB系列函数，这些函数可以做什么呢？<br />
第一就是静态模版技术。所谓静态模版技术就是通过某种方式，使得用户在client端得到的是由PHP产生的html页面。如果这个html页面不会再被更新，那么当另外的用户再次浏览此页面时，程序将不会再调用PHP以及相关的数据库，对于某些信息量比较大的网站，例如sina,163,sohu。类似这种的技术带来的好处是非常巨大的。<br />
代码示例：<br />
代码片段</p>
<p><span style="color: #00ccff;">&lt;?php<br />
ob_start();                          //打开缓冲区<br />
?&gt;<br />
php页面的全部输出<br />
&lt;?<br />
$content = ob_get_contents();          //取得php页面输出的全部内容<br />
$fp = fopen(“output.html”, “w”);        //创建一个文件，并打开，准备写入<br />
fwrite($fp, $content);                 //把php页面的内容全部写入output.html，然后……<br />
fclose($fp);<br />
?&gt;<br />
</span>当然这个ob系列函数还有其他很多用处我就不在这里一一说明了。<br />
2、apache输出控制<br />
将SendBufferSize设置为页面大小，这样就能将页面一次性放在发送缓冲区从而增加处理速度。<br />
SendBufferSize 指令<br />
说明<br />
TCP发送缓冲区大小(字节)<br />
语法<br />
SendBufferSize bytes<br />
默认值<br />
SendBufferSize 0<br />
作用域<br />
server config<br />
状态<br />
MPM<br />
模块<br />
beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker</p>
<p>这个指令设置服务器的TCP发送缓冲区的大小(字节)。提高这个值会导致两个后果：高速度和高潜伏时间(100ms左右)。如果设置为”0&#8243;，将使用操作系统默认值。<br />
通过源代码方式编译你的Apache/PHP/Database 可让你的程序增加10&#8211;15%的速度<br />
下面再说说在代码优化的时候应该注意的<br />
1、短代码不等于快的代码<br />
很多人在写程序时希望将代码写的越简洁越好，但是越短的代码有时候反而需要更长的执行时间，所以哪怕是用更多的代码也不使用速度慢的代码<br />
2、在写程序的时候更应该注重程序的扩展性，而不是追求速度<br />
3、在优化你的代码之前，先看看跟数据库有关的部分，因为大多数应用程序的瓶颈在数据库而不是代码<br />
4、微优化得不偿失<br />
什么叫做微优化？就像前面所说的将正则表达式部分的代码改用字符串函数代替。这样做有以下缺点<br />
 花费时间较长<br />
 不会解决你的性能问题<br />
 很有可能会破坏以前的代码从而产生未知的错误<br />
 付出大于回报<br />
这里还不得不提到一个误区，有些人为了让程序更加优化，在分析业务逻辑的时候便将优化考虑在内了，从而为了得到更优的代码而改动业务逻辑。这是十分愚蠢的想法，因为程序的目的便是为了处理现实中遇到的问题，是为这些问题服务的，怎么能本末倒置呢。<br />
在优化代码之前 优化数据库</p>
]]></content:encoded>
			<wfw:commentRss>http://www.imjqy.com/php-xml/php_youhua/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

