<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>朝闻道的“爱学”日志</title>
		<link>http://www.ax.net.cn/</link>
		<description>天道酬勤，唯爱学可成才</description>
		<copyright>Copyright (C) 2004 Security Angel Team [S4T] All Rights Reserved.</copyright>
		<generator>SaBlog-X Version 1.6 Build 20080806</generator>
		<lastBuildDate>Fri, 10 Sep 2010 12:10:41 +0000</lastBuildDate>
		<ttl>30</ttl>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=392</guid>
			<title>读取远程文件的类和屏蔽指定IP的类</title>
			<author>admin</author>
			<description><![CDATA[<p>[localfile=1]<br />
读取远程文件.小偷类。<br />
http://u.115.com/file/f13a3b81e2<br />
<br />
[localfile=2]<br />
使用XML格式作数据文档，屏蔽文档内的指定IP地址</p>
<p>http://u.115.com/file/f1dde36ee6</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=392" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=392</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2010-07-31 09:10</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=391</guid>
			<title>两个不错的PHP类</title>
			<author>admin</author>
			<description><![CDATA[<p>[localfile=2]</p>
<p>用来生成HTML和JS的树形目录。</p>
<p><a href="http://u.115.com/file/f1bae1cd0">http://u.115.com/file/f1bae1cd0</a></p>
<p>&nbsp;</p>
<p>[localfile=1]</p>
<p>一个轻量的MVC框架。</p>
<p><a href="http://u.115.com/file/f19549b12e">http://u.115.com/file/f19549b12e</a></p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=391" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=391</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2010-07-29 21:54</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=379</guid>
			<title>让PHP断点续传[下载]</title>
			<author>admin</author>
			<description><![CDATA[<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="vars">$fname</span><span>&nbsp;=&nbsp;</span><span class="string">'./MMLDZG.mp3'</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="vars">$fp</span><span>&nbsp;=&nbsp;</span><span class="func">fopen</span><span>(</span><span class="vars">$fname</span><span>,</span><span class="string">'rb'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="vars">$fsize</span><span>&nbsp;=&nbsp;</span><span class="func">filesize</span><span>(</span><span class="vars">$fname</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">if</span><span>&nbsp;(isset(</span><span class="vars">$_SERVER</span><span>[</span><span class="string">'HTTP_RANGE'</span><span>])&nbsp;&amp;&amp;&nbsp;(</span><span class="vars">$_SERVER</span><span>[</span><span class="string">'HTTP_RANGE'</span><span>]&nbsp;!=&nbsp;</span><span class="string">&quot;&quot;</span><span>)&nbsp;&amp;&amp;&nbsp;preg_match(</span><span class="string">&quot;/^bytes=([0-9]+)-$/i&quot;</span><span>,&nbsp;</span><span class="vars">$_SERVER</span><span>[</span><span class="string">'HTTP_RANGE'</span><span>],&nbsp;</span><span class="vars">$match</span><span>)&nbsp;&amp;&amp;&nbsp;(</span><span class="vars">$match</span><span>[1]&nbsp;&lt;&nbsp;</span><span class="vars">$fsize</span><span>))&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$start</span><span>&nbsp;=&nbsp;</span><span class="vars">$match</span><span>[1];&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$start</span><span>&nbsp;=&nbsp;0;&nbsp;}&nbsp;@header(</span><span class="string">&quot;Cache-control:&nbsp;public&quot;</span><span>);&nbsp;@header(</span><span class="string">&quot;Pragma:&nbsp;public&quot;</span><span>);&nbsp;</span><span class="keyword">if</span><span>&nbsp;(</span><span class="vars">$star</span><span>--&gt;&nbsp;0)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="func">fseek</span><span>(</span><span class="vars">$fp</span><span>,&nbsp;</span><span class="vars">$start</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Header(<span class="string">&quot;HTTP/1.1&nbsp;206&nbsp;Partial&nbsp;Content&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;Header(<span class="string">&quot;Content-Length:&nbsp;&quot;</span><span>&nbsp;.&nbsp;(</span><span class="vars">$fsize</span><span>&nbsp;-&nbsp;</span><span class="vars">$start</span><span>));&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Header(<span class="string">&quot;Content-Ranges:&nbsp;bytes&quot;</span><span>&nbsp;.&nbsp;</span><span class="vars">$start</span><span>&nbsp;.&nbsp;</span><span class="string">&quot;-&quot;</span><span>&nbsp;.&nbsp;(</span><span class="vars">$fsize</span><span>&nbsp;-&nbsp;1)&nbsp;.&nbsp;</span><span class="string">&quot;/&quot;</span><span>&nbsp;.&nbsp;</span><span class="vars">$fsize</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;<span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;header(<span class="string">&quot;Content-Length:&nbsp;$fsize&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;Header(<span class="string">&quot;Accept-Ranges:&nbsp;bytes&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>@header(<span class="string">&quot;Content-Type:&nbsp;application/octet-stream&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>@header(<span class="string">&quot;Content-Disposition:&nbsp;attachment;filename=mmdld.mp3&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="func">fpassthru</span><span>(</span><span class="vars">$fp</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>fpassthru() 函数输出文件指针处的所有剩余数据。</p>
<p>该函数将给定的文件指针从当前的位置读取到 EOF，并把结果写到输出缓冲区。</p>
<p>引用：http://www.c1991.com/article/197.html</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=379" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=379</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2010-04-02 10:04</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=374</guid>
			<title>PHP下载时VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题</title>
			<author>admin</author>
			<description><![CDATA[<div id="read_tpc" class="f14">最近在PHP官网下载新版，发现For Windows的版本一共有四个版本，VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe。 琢磨了一下，在这里分享一下经验。不对的地方有望大家斧正。<br />
<br />
一、如何选择PHP5.3的VC9版本和VC6版本<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;VC6版本是使用Visual Studio 6编译器编译，如果PHP是用Apache来架设，那就选择VC6版本。<br />
&nbsp;&nbsp;&nbsp;&nbsp;VC9版本是使用Visual Studio 2008编译器编译，如果PHP是用IIS来架设，那就选择VC9版本。<br />
<br />
二、如何选择PHP5.3的Thread Safe和Non Thread Safe版本<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;从字面上理解，Thread Safe是线程安全，执行时会进行线程（Thread）安全检查，以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe是非线程安全，在执行时不进行线程（Thread）安全检查。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;再来看PHP的两种执行方式：ISAPI和FastCGI。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;ISAPI执行方式是以DLL动态库的形式使用，可以在被用户请求后执行，在处理完一个用户请求后不会马上消失，所以需要进行线程安全检查，这样来提高程序的执行效率，所以如果是以ISAPI来执行PHP，建议选择Thread Safe版本；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;而FastCGI执行方式是以单一线程来执行操作，所以不需要进行线程的安全检查，除去线程安全检查的防护反而可以提高执行效率，所以，如果是以FastCGI来执行PHP，建议选择Non Thread Safe版本。</div><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=374" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=374</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2010-03-18 10:31</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=372</guid>
			<title>取出当月的第一秒</title>
			<author>admin</author>
			<description><![CDATA[<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;toDate(</span><span class="vars">$time</span><span>,&nbsp;</span><span class="vars">$format</span><span>&nbsp;=&nbsp;</span><span class="string">'Y-m-d&nbsp;H:i:s'</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(</span><span class="func">empty</span><span class="keyword">empty</span><span>&nbsp;(&nbsp;</span><span class="vars">$time</span><span>&nbsp;))&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="string">''</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="vars">$format</span><span>&nbsp;=&nbsp;</span><span class="func">str_replace</span><span>&nbsp;(&nbsp;</span><span class="string">'#'</span><span>,&nbsp;</span><span class="string">':'</span><span>,&nbsp;</span><span class="vars">$format</span><span>&nbsp;);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="func">date</span><span>&nbsp;(</span><span class="vars">$format</span><span>,&nbsp;</span><span class="vars">$time</span><span>&nbsp;);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="func">echo</span><span>&nbsp;</span><span class="func">strtotime</span><span>(</span><span class="func">date</span><span>(Y).</span><span class="string">'-'</span><span>.</span><span class="func">date</span><span>(m).</span><span class="string">&quot;-00&nbsp;00:00:00&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="func">echo</span><span>&nbsp;toDate(</span><span class="func">strtotime</span><span>(</span><span class="func">date</span><span>(Y).</span><span class="string">'-'</span><span>.</span><span class="func">date</span><span>(m).</span><span class="string">&quot;-00&nbsp;23:59:59&quot;</span><span>)+1);&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="func">echo</span><span>&nbsp;</span><span class="string">'&lt;br&gt;'</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="func">echo</span><span>&nbsp;</span><span class="func">mktime</span><span>(0,&nbsp;0,&nbsp;0,&nbsp;</span><span class="func">date</span><span>(</span><span class="string">'n'</span><span>),&nbsp;1);&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="func">echo</span><span>&nbsp;toDate(</span><span class="func">mktime</span><span>(0,&nbsp;0,&nbsp;0,&nbsp;</span><span class="func">date</span><span>(</span><span class="string">'n'</span><span>),&nbsp;1));&nbsp; <br />
    </span></span></li>
</ol>
</div>
<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span>#&nbsp;取出本月的第一天&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="vars">$beginTime</span><span>&nbsp;=&nbsp;</span><span class="func">mktime</span><span>(0,&nbsp;0,&nbsp;0,&nbsp;</span><span class="func">date</span><span>(</span><span class="string">'n'</span><span>),&nbsp;1);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>#&nbsp;取出下個月的第一天&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="vars">$endTime</span><span>&nbsp;=&nbsp;</span><span class="func">strtotime</span><span>(</span><span class="string">'+1&nbsp;month'</span><span>,&nbsp;</span><span class="vars">$beginTime</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=372" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=372</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2010-02-24 12:00</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=351</guid>
			<title>php5的魔术方法：用__call()实现方法重载</title>
			<author>admin</author>
			<description><![CDATA[<p>PHP5&nbsp;的对象新增了一个专用方法&nbsp;__call()，这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法，__call&nbsp;方法将会被自动调用。<br />
<br />
例七：__call<br />
<br />
&lt;?php<br />
class&nbsp;foo&nbsp;{<br />
&nbsp;&nbsp;function&nbsp;__call($name,$arguments)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;print(&quot;Did&nbsp;you&nbsp;call&nbsp;me?&nbsp;I'm&nbsp;$name!&quot;);<br />
&nbsp;&nbsp;}<br />
}&nbsp;$x&nbsp;=&nbsp;new&nbsp;foo();<br />
$x-&gt;doStuff();<br />
$x-&gt;fancy_stuff();<br />
?&gt;<br />
<br />
这个特殊的方法可以被用来实现&ldquo;过载(overloading)&rdquo;的动作，这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。<br />
<br />
例八：使用&nbsp;__call&nbsp;实现&ldquo;过载&rdquo;动作<br />
<br />
&lt;?php<br />
class&nbsp;Magic&nbsp;{<br />
&nbsp;&nbsp;function&nbsp;__call($name,$arguments)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if($name=='foo')&nbsp;{<br />
&nbsp;&nbsp;if(is_int($arguments[0]))&nbsp;$this-&gt;foo_for_int($arguments[0]);<br />
&nbsp;&nbsp;if(is_string($arguments[0]))&nbsp;$this-&gt;foo_for_string($arguments[0]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;foo_for_int($x)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;print(&quot;oh&nbsp;an&nbsp;int!&quot;);<br />
&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;foo_for_string($x)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;print(&quot;oh&nbsp;a&nbsp;string!&quot;);<br />
&nbsp;&nbsp;}<br />
}&nbsp;$x&nbsp;=&nbsp;new&nbsp;Magic();<br />
$x-&gt;foo(3);<br />
$x-&gt;foo(&quot;3&quot;);<br />
?&gt;</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=351" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=351</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-11-17 13:47</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=348</guid>
			<title>mysql 自动判断插入数据或更新数据</title>
			<author>admin</author>
			<description><![CDATA[<p>我有一个tag的数据表用来记录各类文章的关键字并记录使用次数以便各内容关联和统计。</p>
<p>现在我有个A关键字需要记录可是我不知道A关键字是第一次使用还是已经存在了，为了方便使用如下语句</p>
<p>其中 <span><span class="string">tagname 是</span></span>UNIQUE KEY</p>
<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">SQL代码</div>
<ol start="1" class="dp-sql">
    <li class="alt"><span><span>$sql=</span><span class="string">&quot;INSERT&nbsp;INTO&nbsp;`itag`&nbsp;(`id`,&nbsp;`tagname`,`book`,`music`) <br />
    </span></span></li>
    <li class="alt"><span><span class="string">VALUES&nbsp;(NULL,&nbsp;'{$tagname}','1','0')&nbsp;ON&nbsp;DUPLICATE&nbsp;KEY&nbsp;UPDATE&nbsp;`book`=`book`+1&quot;</span><span>;&nbsp; <br />
    </span></span></li>
</ol>
</div><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=348" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=348</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-10-28 17:39</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=342</guid>
			<title>FirePHP使用</title>
			<author>admin</author>
			<description><![CDATA[<p>一.firePHP是什么</p>
<p>firePHP是一款ff的插件，用于将php调试信息输出到firebug控制台。</p>
<p>二.firePHP有什么用</p>
<p>在正式发布后，又不影响页面显示的情况下，调试php，将调试信息输出到控制台</p>
<p>三.firePHP安装</p>
<p>1。前提：必须是在ff(如果ff都没有的话，可以不用往下面看了)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要安装ff的插件---firebug</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开输出缓存（将php.ini设置output_buffer=true）或者ob_start();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>2。安装：</p>
<p>a.下载FirePHPcore libariry 或使用PEAR(没有实验过用PEAR）</p>
<p>b.将包放到项目目录下（假设firePHPCore放到项目根目录下）</p>
<p>c.服务端使用方式。</p>
<p>require_once('firePHPCore/fb.php);//引入包</p>
<p>d、开启客户端<br />
开启Firebug 控制台、脚本、网络。<br />
将当前网站添加入FirePHP允许站点</p>
<p>3.使用</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //默认设置输出方式log 等同于 <span style="color: blue;">fb</span><span style="color: olive;">(</span><span style="color: rgb(139, 0, 0);">'</span><span style="color: red;">Log message</span><span style="color: rgb(139, 0, 0);">'</span><span style="color: gray;">&nbsp; ,</span><span style="color: blue;">FirePHP</span><span style="color: gray;">::</span><span style="color: blue;">LOG</span><span style="color: olive;">)</span><span style="color: gray;">;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FB::LOG(&quot;LOG MESSAGE&quot;,'LOG');</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//默认设置输出方式log 等同于 <span style="color: blue;"><span style="color: blue;">fb</span><span style="color: olive;">('</span><span style="color: rgb(139, 0, 0);"><span style="color: rgb(0, 0, 0);">INFO MESSAGE</span></span><span style="color: rgb(139, 0, 0);">'</span><span style="color: gray;"> ,</span><span style="color: blue;">FirePHP</span><span style="color: gray;">::</span><span style="color: blue;">INFO</span><span style="color: olive;">)</span><span style="color: gray;">;</span></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FB::info(&quot;INFO MESSAGE&quot;,&quot;INFO&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //默认设置输出方式log 等同于 <span style="color: blue;"><span style="color: blue;">fb</span><span style="color: olive;">(</span><span style="color: rgb(139, 0, 0);">'</span><span style="color: red;"><span style="color: rgb(0, 0, 0);">ERROR MESSAGE&lsquo;,'ERROR'</span></span><span style="color: gray;">,FirePHP</span><span style="color: gray;">:ERROR</span><span style="color: olive;">)</span><span style="color: gray;">;</span></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FB::error(&quot;ERROR MESSAGE&quot;,&quot;ERROR&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //默认设置输出方式log 等同于 <span style="color: blue;"><span style="color: blue;"><span style="color: rgb(0, 0, 0);">fb(&quot;WARN MESSAGE&quot;,&quot;WARN&quot;,FirePHP::WARN);</span></span></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FB::warn(&quot;WARN MESSAGE&quot;,&quot;WARN&quot;);</p>
<p>按组输出</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FB::group(&quot;TEST1 GROUP&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FB::groupEnd();</p>
<p>按表格输出</p>
<p>第一行默认为表头</p>
<p>$arr = array();<br />
$arr[] = array('header1','header2');//表头<br />
$arr[] = array('content1','content2');<br />
fb($arr,'table',FirePHP::TABLE);</p>
<p>输出当前trace信息（当前文件，行，类，方法）</p>
<p>fb<span style="color: rgb(0, 153, 0);">(</span>'Trace Label'<span style="color: rgb(51, 153, 51);">,</span> FirePHP<span style="color: rgb(51, 153, 51);">::</span><span style="color: rgb(0, 64, 0);">TRACE</span><span style="color: rgb(0, 153, 0);">)</span>;</p>
<p>输出数组</p>
<p>$arr = array('key1'=&gt;'value1','key2'=&gt;array('key21'=&gt;'value21'));</p>
<p>fb($arr,'array');</p>
<p>还有点需要注意，为了数据的安全，在修改完bug正式发布的时候，需要FB::setEnabled(false); 调试信息将不再输出到控制台</p>
<p>参考资料：<a target="_blank" href="http://www.firephp.org/HQ/Use.htm">http://www.firephp.org/HQ/Use.htm</a></p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=342" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=342</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-10-12 08:54</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=338</guid>
			<title>学习豆瓣的 Google Analytics 应用</title>
			<author>admin</author>
			<description><![CDATA[<h2>豆瓣 Google Analytics 代码加载模式</h2>
<p>豆瓣从今年开始也加入 Google Analytics 的统计阵营。让我们通过它加载的 Google Analytics 源码，简单分析一下它都是怎么应用的。</p>
<p>豆瓣的源码来看看它的Google Analytics统计代码</p>
<p style="text-align: center;"><img alt="豆瓣 Google Analytics 代码" src="http://www.phpv.net/uploadfile/month_200907/local_SgQWoe9Mkc.jpg" /><br />
豆瓣 Google Analytics 代码</p>
<p>一般默认的 Google Analytics代码如下：</p>
<p style="text-align: center;"><img alt="默认  Google Analytics 统计代码" src="http://www.phpv.net/uploadfile/month_200907/local_TDkdtTlLOz.jpg" /><br />
默认  Google Analytics 统计代码</p>
<p>两相对比，我们就会发现豆瓣加载 <code>ga.js </code>的方式与默认的方式有些不太一样，由于豆瓣并没有采用 https 加密访问，所以撇弃了默认的ga.js加载方式。</p>
<p>默认的统计函数，<code>pageTracker </code>也被豆瓣改成了 <code>_ga</code> ，这个只是名称定义上的区别，并没有什么实质的改变。豆瓣的主要应用是下面两个函数：</p>
<h3>使用 _ga._addOrganic 识别非主流搜索引擎</h3>
<p>再来看豆瓣比默认 Google Analytics 代码增加的部分，那就是多了数个 <code>_ga._addOrganic </code>，这是 Google Analytics 添加自定义搜索引擎的代码。尽管 Google Analytics 对于主流的搜索引擎都能自动识别，但毕竟能识别的是国外的主流搜索引擎，在国内，像搜狐的 Sogou，QQ 的 soso，网易的有道等搜索引擎，<strong>都不能被 Google Analytics 正确识别，而被当作推荐来源</strong>。这时候我们就可以利用<code>_addOrganic</code> 参数来识别这些非主流搜索引擎，如豆瓣的做法。</p>
<h3>使用 _addIgnoredOrganic 忽略关键字</h3>
<p>除了添加自定义搜索引擎，豆瓣在最后还添加了如下这些代码:</p>
<pre>_ga._addIgnoredOrganic(&quot;豆瓣&quot;);<br />_ga._addIgnoredOrganic(&quot;douban&quot;);<br />_ga._addIgnoredOrganic(&quot;豆瓣网&quot;);<br />_ga._addIgnoredOrganic(&quot;www.douban.com&quot;);</pre>
<p>这些代码用来把引号中的关键词从搜索引擎的关键词报告中排除，而当成直接点击量来源。</p>
<p>为什么要这么做？因为一个知名的大网站，来自这些品牌词的搜索流量都非常大，常常是排在前几位的搜索关键词来源，而这通常是因为搜索引擎养成现在的 人都懒得记网址，直接搜索品牌名来记住域名。这些品牌词对于网站的关键词来源分析并没有很直接的帮助，所以在来自品牌词的流量很大的情况下，可以直接把这 些关键词识别成直接点击量来源。</p>
<p>关于<strong>自定义 Google Analytics 搜索引擎</strong>和<strong>排除特定关键词为直接点击量来源</strong>的语法，可以参考<a href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiSearchEngines.html" title="_addOrganic() 与 _addIgnoredOrganic() 用法介绍" target="_blank"> Google Code 上关于这方面的详细介绍。</a></p>
<h2>通过 _setVar 识别用户</h2>
<p>当登录豆瓣后，再来分析豆瓣的源码，会发现多了一个<code>ga._setVar(&rdquo;xxxx&rdquo;)</code>的 Google Analytics 参数。</p>
<p style="text-align: center;"><img alt="豆瓣使用 Google Analytics 的._setVar参数来跟踪登录用户行为" src="http://www.phpv.net/uploadfile/month_200907/local_pFIluyVQXs.jpg" /><br />
豆瓣使用 Google Analytics 的._setVar参数来跟踪登录用户行为</p>
<p><code>_setVar()</code> 函数是 Google Analytics 的用户定义函数，主要用于对特定来源的用户行为进行分类，例如可以对登录浏览的用户设置一个数值，然后在 Google Analytics 后台的<strong>访问者/用户定义</strong> 中查看其浏览属性。</p>
<p style="text-align: center;"><img width="600" alt="Google Analytics 访问者/用户定义报告" src="http://www.phpv.net/uploadfile/month_200907/local_LfK9D1bCL3.jpg" /><br />
Google Analytics  访问者/用户定义报告</p>
<p>分析豆瓣的源码可以知道，豆瓣对每一个登录后的用户，都赋以一个专门的 id 值，这样可以在用户定义报告里，看到整体的登录用户访问行为，乃至每个登录用户的浏览行为。通过这样设定后，豆瓣便可以轻易获取高忠诚度访问用户的访问行为。<a href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiBasicConfiguration.html#_gat.GA_Tracker_._setVar" title="_setVar 设置说明" target="_blank">关于_setVar()的更多说明，请参阅 Google Analytics的技术文档</a></p>
<p>如何根据访问者在我的网站上访问的页面或在表单上做出的响应对其进行分类？<a href="http://www.google.com/support/googleanalytics/bin/answer.py?hlrm=en&amp;answer=57045" title=" 如何根据访问者在我的网站上访问的页面或在表单上做出的响应对其进行分类？" target="_blank">在 Google Analytics 官方的帮助文件，也给出了另外一个应用案例</a></p>
<p>值得注意的是，原来在设置 <code>_setVar()</code> 函数的时候，整个网站的跳出率会出现重大的偏差，不过在<a href="http://analytics.blogspot.com/2009/01/using-setvar-heres-update-on-bounce.html" title="Google Analytics修正_setVar函数对网站跳出率的影响" target="_blank">最近的google analytics官方博客，指出该bug已经修正</a>，客户在进行这方面设置的时候，还是要注意对比前后数据是否有重大偏差。</p>
<h2>通过 _trackPageview 区分不同类型的评论</h2>
<p>豆瓣上的书评，影评和乐评可以说是豆瓣网站的核心价值所在。一般评论的URL格式如下：</p>
<p style="text-align: center;"><img alt="豆瓣上单条评论的URL" src="http://www.phpv.net/uploadfile/month_200907/local_LP9SBYU5iw.jpg" /><br />
豆瓣上单条评论的URL</p>
<p>当查看该页面的网页源代码时，会发现有趣的现象:</p>
<p style="text-align: center;"><img alt="豆瓣单条评论页的 Google Analytics 代码" src="http://www.phpv.net/uploadfile/month_200907/local_oBi5X9K3OC.jpg" /><br />
豆瓣单条评论页的 Google Analytics 代码</p>
<p>一般 Google Analytics 的<code>_trackPageview()</code> 括弧中的参数是留空的， Google Analytics 会自动捕获网址的 URL 参数，如果在 <code>_trackPageview()</code>括弧中输入特定的数值，那么在 Google Analytics 的报表中，URL 将是我们指定的参数，而不再是我们在地址栏看到的 URL。</p>
<p>如上面的例子，在 Google Analytics 中看到的URL将是<span style="color: rgb(255, 0, 0);">/book/review/1946018/</span>，而不再是我们在浏览器地址栏看到的<span style="color: rgb(255, 0, 0);">/review/1946018/</span></p>
<p>当所在频道是电影或者音乐时，<code>_trackPageview()</code> 中的参数将根据所在频道的属性，变为/movie/xxxxx 或者 /music/xxxxx的数值。</p>
<p>豆瓣通过对的参数进行重新指定，主要有以下的好处：</p>
<p>保证了用户和搜索引擎看到的 URL 比较简短，达到 URL 对用户友好和对搜索引擎友好的目的；而在 Google Analytics 报告中，通过 <span style="color: rgb(255, 0, 0);">内容/内容细目/ </span>报告，又能了解到各个频道总的浏览情况。</p>
<p>在GA的<span style="color: rgb(255, 0, 0);">内容细目</span>报告中，将会多出 <span style="color: rgb(255, 0, 0);">/book/    /music/  /movie/</span> 这样的文件夹来，总而获得各个频道的合计浏览数据。</p>
<p>而如果只是使用默认 <code>_trackPageview()</code>，你将只能得到所有评论页面的浏览数据，而无法得到细分的各个频道的浏览数据。</p>
<p>关于<code>_trackPageview()</code>的具体的使用方法<a href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApi.html#_gat.GA_Tracker_._trackPageview" title="_trackPageview中参数的使用" target="_blank">可参照 Google Code 的说明</a></p>
<p>注意事项:使用 <code>_trackPageview()</code>  参数重新指定 URL 之后，网站覆盖图的数据将受到影响。<a href="http://www.google.com/support/analytics/bin/answer.py?hl=cn&amp;answer=66982" target="_blank">可参阅 Google Analytics 的官方帮助文件</a></p>
<p>除了豆瓣使用 <code>_trackPageview()</code> 来对URL进行重写，<a href="http://www.dianping.com/" target="_blank">大众点评网</a>也采用了类似的做法（应该是比豆瓣更早采用。。。因为是我在点评网任职时候实验的做法;那时候豆瓣还没有使用 Google Analytis 统计代码，呵呵），有兴趣的同学可以自己去研究点评的 Google Analytis 代码。</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=338" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=338</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-09-20 17:16</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=326</guid>
			<title>递归列出所有的目录和文件</title>
			<author>admin</author>
			<description><![CDATA[<p>一个目录列表和文件的递归函数</p>
<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
    <li><span class="keyword">function</span><span>&nbsp;tree(</span><span class="vars">$directory</span><span>) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li><span class="vars">$mydir</span><span>=dir(</span><span class="vars">$directory</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="func">echo</span><span>&nbsp;&ldquo;&lt;ul&gt; &nbsp;&nbsp;</span></li>
    <li><span>&ldquo;; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">while</span><span>(</span><span class="vars">$file</span><span>=</span><span class="vars">$mydir</span><span>-&gt;read()){ &nbsp;&nbsp;</span></li>
    <li><span class="keyword">if</span><span>((</span><span class="func">is_dir</span><span>(&rdquo;</span><span class="vars">$directory</span><span>/</span><span class="vars">$file</span><span>&rdquo;))&nbsp;AND&nbsp;(</span><span class="vars">$file</span><span>!=&rdquo;.&rdquo;)&nbsp;AND&nbsp;(</span><span class="vars">$file</span><span>!=&rdquo;..&rdquo;))&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="func">echo</span><span>&nbsp;&ldquo;&lt;li&gt;&lt;font&nbsp;color=#ff00cc&gt;&lt;b&gt;</span><span class="vars">$file</span><span>&lt;/b&gt;&lt;/font&gt;&lt;/li&gt;&rdquo;; &nbsp;&nbsp;</span></li>
    <li><span>tree(&rdquo;</span><span class="vars">$directory</span><span>/</span><span class="vars">$file</span><span>&rdquo;); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span class="keyword">else</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="func">echo</span><span>&nbsp;&ldquo;&lt;li&gt;</span><span class="vars">$file</span><span>&lt;/li&gt;&rdquo;; &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="func">echo</span><span>&nbsp;&ldquo;&lt;/ul&gt;&rdquo;; &nbsp;&nbsp;</span></li>
    <li><span class="vars">$mydir</span><span>-&gt;close(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span class="comment">//start&nbsp;the&nbsp;program </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="func">echo</span><span>&nbsp;&ldquo;&lt;h2&gt;目录为粉红色&lt;/h2&gt;&rdquo;; &nbsp;&nbsp;</span></li>
    <li><span>tree(&rdquo;./&rdquo;); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>?&gt;&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=326" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=326</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-09-07 10:22</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=325</guid>
			<title>mysql替换数据库中的部分内容</title>
			<author>admin</author>
			<description><![CDATA[<p>例子：将cdb_pms表subject字段中的Welcom to替换成 欢迎光临<br />
UPDATE `cdb_pms`<br />
SET `subject` = REPLACE(`subject`, &lsquo;Welcome to&rsquo;, &lsquo;欢迎光临&rsquo;)<br />
WHERE INSTR(`subject`,&rsquo;Welcome to&rsquo;) &lt; 0</p>
<p>替换cdb_posts表的message字段，将&ldquo;viewthread.php?tid=3989&rdquo;替换成&ldquo;viewthread.php?tid=16546&rdquo;</p>
<p>UPDATE `cdb_posts`<br />
SET `message`= REPLACE(`message`, &lsquo;viewthread.php?tid=3989&prime;, &lsquo;viewthread.php?tid=16546&prime;)<br />
WHERE INSTR(`message`,&rsquo;viewthread.php?tid=3989&prime;) &lt; 0 ;</p>
<p>&nbsp;</p>
<p>删除所有的空格<br />
UPDATE `es_product` SET `pro_pub_time` = TRIM(`pro_pub_time`)</p>
<p>删除所有饱含&rsquo;['或者']&lsquo;或者&rsquo;.'的字符<br />
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, &lsquo;[','') WHERE INSTR(`pro_pub_time`,'[') &lt; 0<br />
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ']&lsquo;,&rdquo;) WHERE INSTR(`pro_pub_time`,&rsquo;]') &lt; 0<br />
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, &lsquo;.&rsquo;,'-&rsquo;) WHERE INSTR(`pro_pub_time`,&rsquo;.') &lt; 0</p>
<p>替换所有含中文&rsquo;-'的为英文&rsquo;-&rsquo;<br />
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, &lsquo;－&rsquo;,'-&rsquo;) WHERE INSTR(`pro_pub_time`,&rsquo;－&rsquo;) &lt; 0</p>
<p>将所有的年月都替换成&rsquo;-&rsquo;<br />
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, &lsquo;年&rsquo;,'-&rsquo;) WHERE INSTR(`pro_pub_time`,&rsquo;年&rsquo;) &lt; 0<br />
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, &lsquo;月&rsquo;,'-&rsquo;) WHERE INSTR(`pro_pub_time`,&rsquo;月&rsquo;) &lt; 0</p>
<p>将所有&rsquo;2005-04-&rsquo;这种类型的替换成&rsquo;2005-04-01&prime;<br />
UPDATE `es_product` SET `pro_pub_time` = CONCAT( `pro_pub_time`, &lsquo;01&prime;) WHERE SUBSTRING_INDEX( `pro_pub_time`, &lsquo;-&rsquo;, -1) = &rdquo; AND LENGTH(`pro_pub_time`) &lt; 0 AND LENGTH(`pro_pub_time`) &lt; 5</p>
<p>将所有&rsquo;2005-&rsquo;这种类型替换成&rsquo;2005-01-01&prime;<br />
UPDATE `es_product` SET `pro_pub_time` = CONCAT( `pro_pub_time`, &lsquo;01-01&prime;) WHERE INSTR(`pro_pub_time`,&rsquo;-') &lt; 0 AND LENGTH(`pro_pub_time`) = 5</p>
<p>将所有 饱含&rsquo;-',但是位数小于8的改成追加&rsquo;-01&prime;<br />
UPDATE `es_product` SET `pro_pub_time` = CONCAT( `pro_pub_time`, &lsquo;-01&prime;) WHERE INSTR(`pro_pub_time`,&rsquo;-') &lt; 0 AND LENGTH(`pro_pub_time`) &gt; 8</p>
<p>将所有&rsquo;2005&prime;这样的改成&rsquo;2005-01-01&prime;<br />
UPDATE `es_product` SET `pro_pub_time` = CONCAT(`pro_pub_time`,&rsquo;-01-01&prime;) WHERE INSTR(`pro_pub_time`,&rsquo;-') = 0 AND LENGTH(`pro_pub_time`) = 4</p>
<p>最后将所有&rsquo;2005-01-01&prime;格式化成&rsquo;2005年01月&rsquo;<br />
UPDATE `es_product` SET `pro_pub_time` = DATE_FORMAT(`pro_pub_time`,&rsquo;%Y年%m月&rsquo;) WHERE INSTR(`pro_pub_time`,&rsquo;-') &lt; 0</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=325" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=325</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-09-07 10:21</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=324</guid>
			<title>10 件（也许）你不了解 PHP 的事情</title>
			<author>admin</author>
			<description><![CDATA[<p>PHP 是我用过的语言中，最令人恼火的但同时也是最有趣的语言。我之所以说&ldquo;令人恼火&rdquo;主要是因为函数命名极其不一致。尽管我每天都要用到这些函数，我还是要想一下&ldquo;究竟是 <em>str_pos</em> 还是 <em>strpos</em>？是 <em>str_split</em> 还是 <em>strsplit</em>？&rdquo;。另一方面，有时候可以用一行简单的代码就能解决一个难题。<br />
下面是一些很酷的特性，很可能你也没有注意到：</p>
<ul type="1">
    <li><strong>使用 <em><a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/manual/en/function.ip2long.php" target="_blank"><span style="color: #0000ff">ip2long</span></a>()</em> 和 <em><a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/manual/en=/function.long2ip.php" target="_blank"><span style="color: #0000ff">long2ip</span></a>()</em> 函数来把 IP 地址转化成整型存储到数据库里。</strong>这种方法把存储空间降到了接近四分之一（char(15) 的 15 个字节对整形的 4 个字节），计算一个特定的地址是不是在一个区段内页更简单了，而且加快了搜索和排序的速度（虽然有时仅仅是快了一点）。</li>
    <li><strong>在验证 email 地址的时候使用 <em><a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/manual/en/function.checkdnsrr.php" target="_blank"><span style="color: #0000ff">checkdnsrr</span></a>()</em> 函数验证域名是否存在。</strong>这个内置函数能够确认指定的域名能够解析成 IP 地址。该函数的PHP 文档的<a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/manual/en/function.checkdnsrr.php#48157" target="_blank"><span style="color: #0000ff">用户评论</span></a>部分有一个简单的用户自定义函数，这个函数基于 checkdnsrr()，用来验证 email 地址的合法性。对于那些认为自己的 email 地址是 &ldquo;<a href="mailto:joeuser@wwwphp.net"><font color="#225588">joeuser@wwwphp.net</font></a>&rdquo; 而不是 &ldquo;<a href="mailto:joeuser@php.net"><font color="#225588">joeuser@php.net</font></a>&rdquo; 的家伙们，这个方法可以很方便的抓住他们。</li>
    <li><strong>如果你使用的是 PHP 5 和 MySQL 4.1 或者更高的版本，考虑抛弃 <em>mysql_*</em> 系列函数改用改进版的 <em><a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/manual/en/ref.mysqli.php" target="_blank"><span style="color: #0000ff">mysqli_*</span></a></em> 系列函数。</strong>一个很好的功能就是你可以使用<a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/mysqli_stmt_prepare" target="_blank"><span style="color: #0000ff">预处理语句</span></a>，如果你在维护一个数据库密集型站点，这个功能能够加快查询速度。<a onclick="javascript:pageTracker._trackPageview('/outbound/article/www.johnjawed.com');" href="http://www.johnjawed.com/benchmarks/" target="_blank"><span style="color: #0000ff">一些评估分数</span></a>。</li>
    <li><strong>学会爱上<a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/language.operators.comparison#language.operators.comparison.ternary" target="_blank"><span style="color: #0000ff">三元运算符</span></a></strong>。</li>
    <li><strong>如果你在项目中感觉到有可复用的部分，在你写下一行代码前先看看 </strong><a onclick="javascript:pageTracker._trackPageview('/outbound/article/pear.php.net');" href="http://pear.php.net/" target="_blank"><em><strong><span style="color: #0000ff">PEAR</span></strong></em></a><strong> 中是否已经有了。</strong>很多 PHP 程序员都知道 PEAR 是一个很好的资源库，虽然还有很多程序员不知道。这个在线资源库包含了超过 400 个可以复用的程序片段，这些程序片段你可以立即用刀你的程序里。除非说你的项目真的是非常特别的，你总能找到帮你节省时间的 PEAR 包。（参见 <a onclick="javascript:pageTracker._trackPageview('/outbound/article/pecl.php.net');" href="http://pecl.php.net/" target="_blank"><span style="color: #0000ff">PECL</span></a>）</li>
    <li><strong>用 <a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/manual/en/function.highlight-file.php" target="_blank"><span style="color: #0000ff">highlight_file</span></a>() 来自动的打印出格式化的很漂亮的源代码。</strong>如果你在留言板、IRC 这些地方寻求一个脚本的帮助的话，这个函数用起来非常的顺手。当然了，要小心不要意外的泄露出你的数据库连接信息和密码等。</li>
    <li><strong>使用 <em><a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/manual/en/function.error-reporting.php" target="_blank"><span style="color: #0000ff">error_reporting(0)</span></a></em> 函数来防止用户看到潜在的敏感错误信息。</strong>在理想情况下，发布服务器应该在 <em>php.ini</em> 里完全禁止。但是如果你用的是一个共享的 web 服务器的话，你没有自己的 <em>php.ini</em> 文件，那么这种情况下你最好的选择就是在所有脚本的第一行前加上 <em>error_reporting(0);</em>（或者使用 <a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/manual/en/function.require-once.php" target="_blank"><span style="color: #0000ff">require_once()</span></a> 方法）。这就能够在出错的时候完全屏蔽敏感的 SQL 查询语句和路径名。</li>
    <li><strong>在网数据库中存储很大的字符串之前使用 <em><a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/manual/en/function.gzcompress.php" target="_blank"><span style="color: #0000ff">gzcompress</span></a>()</em> 和 <em><a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/manual/en/function.gzuncompress.php" target="_blank"><span style="color: #0000ff">gzuncompress</span></a>()</em> 来显式的压缩/解压字符串。</strong>这个 PHP 内置函数使用 gzip 算法，可以压缩普通文本达 90%。在我每次要读写 <a onclick="javascript:pageTracker._trackPageview('/outbound/article/dev.mysql.com');" href="http://dev.mysql.com/doc/refman/5.0/en/blob.html" target="_blank"><span style="color: #0000ff">BLOB</span></a> 类型的字段的时候都使用这些函数。唯一额例外就是当我需要全文检索的时候。</li>
    <li><strong>通过&ldquo;<a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/manual/en/functions.arguments.php#functions.arguments.by-reference" target="_blank"><span style="color: #0000ff">引用</span></a>&rdquo;传递参数的方法从一个函数中得到多个返回值。</strong>就像三元运算符一样，大部分受过正式编程训练的程序员都知道这个技巧。但是那些 HTML 背景大于 Pascal 背景的程序员都或多或少的有过这样的疑问&ldquo;在仅能使用一次 <em>return</em> 的情况下，从一个函数里返回多个值？&rdquo;答案就是在变量前加上一个 &ldquo;&amp;&rdquo; 符号，通过&ldquo;引用&rdquo;传递而非&ldquo;值&rdquo;传递。</li>
    <li><strong>完全理解&ldquo;<a onclick="javascript:pageTracker._trackPageview('/outbound/article/us3.php.net');" href="http://us3.php.net/manual/en/security.magicquotes.php" target="_blank"><span style="color: #0000ff">魔术引号</span></a>&rdquo;和 <a onclick="javascript:pageTracker._trackPageview('/outbound/article/en.wikipedia.org');" href="http://en.wikipedia.org/wiki/SQL_injection" target="_blank"><span style="color: #0000ff">SQL 注入</span></a>的危险性。</strong>我希望阅读到这里的开发者都已经很对 SQL 注入和了解了。不过我还是把这条列在这里，是因为这个确实有点难以理解。如果你还没有听说过这种说法，那么把今天剩下的时间都用来 Google、阅读吧。&nbsp;</li>
</ul><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=324" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=324</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-09-07 10:19</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=321</guid>
			<title>功能强大的phpMyDataGrid UTF8 无乱码修正版</title>
			<author>admin</author>
			<description><![CDATA[<p>功能强大的phpMyDataGrid UTF8 无乱码修正版</p>
<p>自己下载看看吧。</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=321" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=321</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-08-28 16:19</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=320</guid>
			<title>FIND_IN_SET 检测值是否在字段值内</title>
			<author>admin</author>
			<description><![CDATA[<p>FIND_IN_SET 检测值是否在字段值内</p>
<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">SQL代码</div>
<ol class="dp-sql">
    <li class="alt"><span><span class="keyword">select</span><span>&nbsp;*&nbsp;</span><span class="keyword">from</span><span>&nbsp;uchome_thread_ext&nbsp;</span><span class="keyword">where</span><span>&nbsp;FIND_IN_SET(</span><span class="string">'p'</span><span>,&middot;tag&middot;)&nbsp;&gt;&nbsp;0&nbsp;</span><span class="op">AND</span><span>&nbsp;FIND_IN_SET(</span><span class="string">'s'</span><span>,&middot;tag&middot;)&nbsp;&gt;&nbsp;0 &nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>FIND_IN_SET('p',&middot;tag&middot;) &gt; 0</p>
<p>检测字段 tag的值内是否含有p，如果有则FIND_IN_SET('p',&middot;tag&middot;) &gt; 0 否则FIND_IN_SET('p',&middot;tag&middot;)&nbsp;&lt; 0</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=320" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=320</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-08-25 17:36</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=315</guid>
			<title>ubuntu常用的命令</title>
			<author>admin</author>
			<description><![CDATA[<p><span style="width: 740px" id="articlecontent" onmouseup="NewHighlight(event)" class="wenzhang_con">
<p><strong>zip压缩文件</strong><br />
压缩成zip文件</p>
<div class="post">
<li>zip file.zip * 压缩当前文件夹的所以文件</li>
<li>zip file.zip ACS.JPG blue.doc command.txt 将三个文件单独压缩进一个文件</li>
<li>zip -m file.zip * 压缩，并自动删除原始文件</li>
<li>zip -r file.zip * 压缩，包含子目录中的内容</li>
<li>zip -j file.zip * 压缩，忽略子目录中的内容</li>
<li>zip -k file.zip * 压缩，文件自动更名成8.3格式</li>
<li>zip -n .mpg: .JPG: .GIF file.zip * 压缩，但对.mpg/.JPG/.GIF文件不进行压缩而直接保存</li>
<li>zip -t 102207 file.zip * 压缩07-10-22以后以后建立的文件</li>
<li>zip file.zip * -x file2 file3 压缩，但不包含file2,file3文件</li>
<li>zip -y file.zip * 压缩链接</li>
<li>zip -1 file.zip * 压缩，压缩率为1，压缩率范围是1-9,9最高</li>
<li>zip -@ file.zip 逐一输入文件名，并对其压缩，输入完后按ctrl+d结束</li>
<p><br />
unzip 解压缩zip文件</p>
<li>unzip file.zip 解压缩file.zip文件</li>
<li>unzip file.zip -x file3 解压缩file.zip，排除file3文件</li>
<li>unzip -Z file.zip 查看压缩包的内容</li>
<li>unzip -l file.zip 查看压缩包的内容</li>
<li>unzip -v file.zip 查看压缩包的内容</li>
<p><strong>tar与gzip</strong><br />
说明：tar无法对文件进行压缩，但可以把文件打包。而gzip虽然可以压缩文件，却不能把文件打包。所以我们经常把两个命令结合使用，产生.tar.gz的文件。一般压缩流程是先用tar打包，再用gzip压缩文件。</p>
<p>tar 打包/解包文件</p>
<li>tar cvf test.tar * 把当前目录下的文件打包，若有链接文件，直接将链接写入</li>
<li>tar zcvf test.tar.gz * 把当前目录下的文件打包并压缩为gz格式</li>
<li>tar jcvf test.tar.bz2 * 把当前目录下的文件打包并压缩为bz2格式</li>
<li>tar hcvf test.tar * 把当前目录下的文件打包，若有链接文件，直接将原始文件写入</li>
<li>tar rvf test.tar file2 把file2文件打包追加在test.tar</li>
<li>tar xvf test.tar 把test.tar解包</li>
<li>tar zxvf test.tar.gz 把test.tar.gz解压缩并解包</li>
<li>tar tvf test.tar 查看文件内容</li>
<p>gzip 压缩文件</p>
<li>gzip file1 压缩file1，并删除原始文件，这点务必要注意</li>
<li>gzip -1 * 压缩本目录所有文件，压缩率为1-9，9最高，默认6</li>
<li>gzip -d file1.gz 解压file1.gz文件</li>
<p>gunzip 解压文件</p>
<li>gunzip file1.gz 解压file1.gz文件</li>
<p style="color: rgb(255,0,0)"><strong>安装程序</strong></p>
<p>gz压缩包编译安装</p>
<ul>1.解压缩</ul>
    <ul>2.执行./configure</ul>
        <ul>3.执行make</ul>
            <ul>4.执行make install</ul>
                <p>编译时缺少h文件的自动处理</p>
                <ul>sudo auto-apt run ./configure</ul>
                    <p>deb安装包</p>
                    <li>dpkg -i debfilename 安装Debian包裹文件</li>
                    <li>dpkg -c debfilename 列出包裹包含的内容</li>
                    <li>dpkg -I debfilename 从.deb 文件中提取包裹信息</li>
                    <li>dpkg -r packagename 卸载一个已安装的包裹（删掉数据和可执行文件）</li>
                    <li>dpkg -P packagename 完全清除一个已安装的包裹（删除数据、可执行文件和所有的配制文件）</li>
                    <li>dpkg -L packagename 列出包裹安装的所有文件清单</li>
                    <li>dpkg -s 显示已安装包裹的信息</li>
                    <li>dpkg -S filename 查找文件属于哪个包</li>
                    <li>dpkg-reconfigure packagename 重新配制一个已经安装的包裹</li>
                    <li>dpkg &ndash;get-selections | grep keyname 获取软件包裹状态</li>
                    <li>echo &ldquo;packagename hold&rdquo; | sudo dpkg &ndash;set-selections 设置软件包裹状态，比如 HOLD 某个包裹不允许升级</li>
                    <li>echo &ldquo;packagename install&rdquo; | sudo dpkg &ndash;set-selections 从 HOLD 状态恢复软件包裹标志位</li>
                    <p>清除所以删除包的残余配置文件</p>
                    <ul>dpkg -l |grep ^rc|awk '{print $2}&rsquo; |tr [&quot;\n&quot;] [&quot; &quot;]|sudo xargs dpkg -P -</ul>
                        <p>apt安装</p>
                        <li>apt-cache search package 搜索包 (apt-cache search httpd)</li>
                        <li>apt-cache show package 获取包的相关信息，如说明、大小、版本等</li>
                        <li>apt-cache depends package 查询软件依赖哪些包</li>
                        <li>apt-cache rdepends package 查询软件被哪些包依赖</li>
                        <li>apt-get install package 安装包</li>
                        <li>apt-get install package &ndash;reinstall 重新安装包</li>
                        <li>apt-get -f install 修复安装</li>
                        <li>apt-get remove package 删除包</li>
                        <li>apt-get remove package &ndash;purge 删除包，包括删除配置文件等</li>
                        <li>apt-get update 更新源</li>
                        <li>apt-get upgrade 更新已安装的包</li>
                        <li>apt-get dist-upgrade 升级系统</li>
                        <li>apt-get dselect-upgrade 使用 dselect 升级</li>
                        <li>apt-get build-dep package 安装相关的编译环境</li>
                        <li>apt-get source package 下载该包的源代码</li>
                        <li>apt-get clean &amp;&amp; sudo apt-get autoclean 清理无用的包</li>
                        <li>apt-get install apt 满足依赖</li>
                        <li>apt-get -f install apt 满足依赖</li>
                        <li>apt-cdrom add 增加一个光盘源</li>
                        <li>apt-file search filename 查找文件属于哪个包</li>
                        <p>系统升级</p>
                        <ul>sudo apt-get update</ul>
                            <ul>sudo apt-get dist-upgrade</ul>
                                <p>查看安装软件时下载包的临时存放目录</p>
                                <ul>ls /var/cache/apt/archives</ul>
                                    </div>
                                    </span></p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=315" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=315</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-08-15 10:22</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=307</guid>
			<title>simpleXML解析xml，简单到不能简单，舒服到不能舒服</title>
			<author>admin</author>
			<description><![CDATA[<p>值用指针-&gt;，属性用['']</p>
<p>$xml =&nbsp;&nbsp; simplexml_load_file('file.xml');echo $xml -&gt;xx;echo $xml['pp'];</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=307" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=307</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-08-03 10:20</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=304</guid>
			<title>一些常用的正则过滤</title>
			<author>admin</author>
			<description><![CDATA[<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol class="dp-c">
    <li class="alt"><span><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/\s+/&quot;</span><span>,&nbsp;</span><span class="string">&quot;&nbsp;&quot;</span><span>,&nbsp;</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤多余回车&nbsp; </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;[&nbsp;]+/si&quot;</span><span>,</span><span class="string">&quot;&lt;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤&lt;__(&quot;&lt;&quot;号后面带空格)&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;\!--.*?--&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//注释&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\!.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤DOCTYPE&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?html.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤html标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?head.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤head标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?meta.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤meta标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?body.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤body标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?link.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤link标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?form.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤form标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/cookie/si&quot;</span><span>,</span><span class="string">&quot;COOKIE&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤COOKIE标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(applet.*?)&gt;(.*?)&lt;(\/applet.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤applet标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?applet.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤applet标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(style.*?)&gt;(.*?)&lt;(\/style.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤style标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?style.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤style标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(title.*?)&gt;(.*?)&lt;(\/title.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤title标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?title.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤title标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(object.*?)&gt;(.*?)&lt;(\/object.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤object标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?objec.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤object标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(noframes.*?)&gt;(.*?)&lt;(\/noframes.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤noframes标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?noframes.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤noframes标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(i?frame.*?)&gt;(.*?)&lt;(\/i?frame.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤frame标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?i?frame.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤frame标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(script.*?)&gt;(.*?)&lt;(\/script.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤script标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&lt;(\/?script.*?)&gt;/si&quot;</span><span>,</span><span class="string">&quot;&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤script标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/javascript/si&quot;</span><span>,</span><span class="string">&quot;Javascript&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤script标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/vbscript/si&quot;</span><span>,</span><span class="string">&quot;Vbscript&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤script标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/on([a-z]+)\s*=/si&quot;</span><span>,</span><span class="string">&quot;On\\1=&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤script标签&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$str</span><span>=preg_replace(</span><span class="string">&quot;/&amp;#/si&quot;</span><span>,</span><span class="string">&quot;&amp;＃&quot;</span><span>,</span><span class="vars">$str</span><span>);&nbsp;</span><span class="comment">//过滤script标签，如javAsCript:alert('aabb)&nbsp;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=304" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=304</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-08-01 15:49</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=303</guid>
			<title>ECSHOP中使用飞信发送免费的订单提醒短信</title>
			<author>admin</author>
			<description><![CDATA[<p>ECSHOP 2.62 自带有短信提醒功能，这项功能由官方短信接口实现，免费用户是无法使用的。上次我们了解了一些使用飞信免费发送短信的接口（<a href="http://www.mingchennet.com/plus/view.php?aid=12">《PHP下的使用fetion飞信免费发送sms短信的接口、函数、方法》http://www.mingchennet.com/plus/view.php?aid=12</a>），这里我们将改造ECSHOP，使得客户提交订单时，系统自动通过飞信发送订单提醒到预设的手机上。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 如果PHP空间支持SOCKET，则可以使用网上广泛流传的方法来实现，详见http://www.lenovoinfo.com /viewthread.php?tid=5&amp;extra=page%3D1 。如果不支持，我们可以利用第三方接口，这里我们使用张宴提供的api接口（使用方法参见<a href="http://www.mingchennet.com/plus/view.php?aid=12">http://www.mingchennet.com/plus/view.php?aid=12</a>）。<br />
<br />
<br />
<br />
&nbsp; 1.登录ECSHOP管理后台，在左侧导航菜单选择 &ldquo;数据库管理&rdquo;&mdash;&mdash;&ldquo;SQL查询&rdquo;，执行如下sql语句</p>
<div new="" courier="" style="border: 1px dashed rgb(204, 204, 204);" class="UGCode">
<div style="border-bottom: 1px dashed rgb(204, 204, 204); padding: 5px 10px; height: 20px; line-height: 20px; font-weight: bold;" class="UGTitle">代码如下</div>
<ol class="sql">
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;">&nbsp;<span style="color: rgb(153, 51, 51); font-weight: bold;">INSERT</span> <span style="color: rgb(153, 51, 51); font-weight: bold;">INTO</span> <span style="color: rgb(255, 0, 0);">`ecs_shop_config`</span> <span style="color: rgb(102, 204, 102);">(</span><span style="color: rgb(255, 0, 0);">`id`</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(255, 0, 0);">`parent_id`</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(255, 0, 0);">`code`</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(255, 0, 0);">`type`</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(255, 0, 0);">`store_range`</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(255, 0, 0);">`store_dir`</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(255, 0, 0);">`value`</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(255, 0, 0);">`sort_order`</span><span style="color: rgb(102, 204, 102);">)</span> <span style="color: rgb(153, 51, 51); font-weight: bold;">VALUES</span> <span style="color: rgb(102, 204, 102);">(</span><span style="color: rgb(204, 102, 204);">805</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(204, 102, 204);">8</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(255, 0, 0);">'sms_fetion_password'</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(255, 0, 0);">'text'</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(255, 0, 0);">''</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(255, 0, 0);">''</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(255, 0, 0);">''</span><span style="color: rgb(102, 204, 102);">,</span> <span style="color: rgb(204, 102, 204);">1</span><span style="color: rgb(102, 204, 102);">)</span>;</div>
    </li>
</ol>
</div>
<p><br />
<br />
2.找到ECSHOP目录下的文件/languages/zh_cn/admin/shop_config.php，在该文件中添加代码</p>
<div new="" courier="" style="border: 1px dashed rgb(204, 204, 204);" class="UGCode">
<div style="border-bottom: 1px dashed rgb(204, 204, 204); padding: 5px 10px; height: 20px; line-height: 20px; font-weight: bold;" class="UGTitle">代码如下</div>
<ol class="php">
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;"><span style="color: rgb(0, 0, 136);">$_LANG</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'cfg_name'</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'sms_fetion_password'</span><span style="color: rgb(0, 153, 0);">]</span> <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 0, 255);">'飞信的登录密码'</span><span style="color: rgb(51, 153, 51);">;</span></div>
    </li>
</ol>
</div>
<p><br />
3.修改ECSHOP根目录下的文件flow.php，找到这段代码</p>
<div new="" courier="" style="border: 1px dashed rgb(204, 204, 204);" class="UGCode">
<div style="border-bottom: 1px dashed rgb(204, 204, 204); padding: 5px 10px; height: 20px; line-height: 20px; font-weight: bold;" class="UGTitle">代码如下</div>
<ol class="php">
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;"><span style="color: rgb(51, 153, 51);">*</span> 如果需要，发短信 <span style="color: rgb(51, 153, 51);">*/</span></div>
    </li>
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;">&nbsp; &nbsp; <span style="color: rgb(177, 177, 0);">if</span> <span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 136);">$_CFG</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'sms_order_placed'</span><span style="color: rgb(0, 153, 0);">]</span> <span style="color: rgb(51, 153, 51);">==</span> <span style="color: rgb(0, 0, 255);">'1'</span> <span style="color: rgb(51, 153, 51);">&amp;&amp;</span> <span style="color: rgb(0, 0, 136);">$_CFG</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'sms_shop_mobile'</span><span style="color: rgb(0, 153, 0);">]</span> <span style="color: rgb(51, 153, 51);">!=</span> <span style="color: rgb(0, 0, 255);">''</span><span style="color: rgb(0, 153, 0);">)</span></div>
    </li>
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;">&nbsp; &nbsp; <span style="color: rgb(0, 153, 0);">{</span></div>
    </li>
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;">&nbsp; &nbsp;&nbsp;&nbsp;省略。。。</div>
    </li>
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;">&nbsp; &nbsp; <span style="color: rgb(0, 153, 0);">}</span></div>
    </li>
</ol>
</div>
<p>修改为</p>
<div new="" courier="" style="border: 1px dashed rgb(204, 204, 204);" class="UGCode">
<div style="border-bottom: 1px dashed rgb(204, 204, 204); padding: 5px 10px; height: 20px; line-height: 20px; font-weight: bold;" class="UGTitle">代码如下</div>
<ol class="php">
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;"><span style="color: rgb(102, 102, 102); font-style: italic;">/* 如果需要，发短信 */</span></div>
    </li>
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;">&nbsp; &nbsp; <span style="color: rgb(177, 177, 0);">if</span> <span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 136);">$_CFG</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'sms_order_placed'</span><span style="color: rgb(0, 153, 0);">]</span> <span style="color: rgb(51, 153, 51);">==</span> <span style="color: rgb(0, 0, 255);">'1'</span> <span style="color: rgb(51, 153, 51);">&amp;&amp;</span> <span style="color: rgb(0, 0, 136);">$_CFG</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'sms_shop_mobile'</span><span style="color: rgb(0, 153, 0);">]</span> <span style="color: rgb(51, 153, 51);">!=</span> <span style="color: rgb(0, 0, 255);">''</span><span style="color: rgb(0, 153, 0);">)</span></div>
    </li>
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;">&nbsp; &nbsp; <span style="color: rgb(0, 153, 0);">{</span> &nbsp; &nbsp; &nbsp; &nbsp;</div>
    </li>
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(0, 0, 136);">$msg</span> <span style="color: rgb(51, 153, 51);">=</span> <span style="color: rgb(0, 0, 136);">$order</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'pay_status'</span><span style="color: rgb(0, 153, 0);">]</span> <span style="color: rgb(51, 153, 51);">==</span> PS_UNPAYED ?</div>
    </li>
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(0, 0, 136);">$_LANG</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'order_placed_sms'</span><span style="color: rgb(0, 153, 0);">]</span> <span style="color: rgb(51, 153, 51);">:</span> <span style="color: rgb(0, 0, 136);">$_LANG</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'order_placed_sms'</span><span style="color: rgb(0, 153, 0);">]</span> <span style="color: rgb(51, 153, 51);">.</span> <span style="color: rgb(0, 0, 255);">'['</span> <span style="color: rgb(51, 153, 51);">.</span> <span style="color: rgb(0, 0, 136);">$_LANG</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'sms_paid'</span><span style="color: rgb(0, 153, 0);">]</span> <span style="color: rgb(51, 153, 51);">.</span> <span style="color: rgb(0, 0, 255);">']'</span><span style="color: rgb(51, 153, 51);">;</span></div>
    </li>
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(153, 0, 0);">file_get_contents</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 255);">&quot;http://sms.api.bz/fetion.php?username=&quot;</span><span style="color: rgb(51, 153, 51);">.</span><span style="color: rgb(0, 0, 136);">$_CFG</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'sms_shop_mobile'</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">.</span><span style="color: rgb(0, 0, 255);">&quot;&amp;password=&quot;</span><span style="color: rgb(51, 153, 51);">.</span><span style="color: rgb(0, 0, 136);">$_CFG</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'sms_fetion_password'</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">.</span><span style="color: rgb(0, 0, 255);">&quot;&amp;sendto=&quot;</span><span style="color: rgb(51, 153, 51);">.</span><span style="color: rgb(0, 0, 136);">$_CFG</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'sms_shop_mobile'</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">.</span><span style="color: rgb(0, 0, 255);">&quot;&amp;message=&quot;</span><span style="color: rgb(51, 153, 51);">.</span><span style="color: rgb(153, 0, 0);">urlencode</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(153, 0, 0);">sprintf</span><span style="color: rgb(0, 153, 0);">(</span><span style="color: rgb(0, 0, 136);">$msg</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 0, 136);">$order</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'consignee'</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(51, 153, 51);">,</span> <span style="color: rgb(0, 0, 136);">$order</span><span style="color: rgb(0, 153, 0);">[</span><span style="color: rgb(0, 0, 255);">'tel'</span><span style="color: rgb(0, 153, 0);">]</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(0, 153, 0);">)</span><span style="color: rgb(51, 153, 51);">;</span></div>
    </li>
    <li style="font-weight: normal; vertical-align: top;">
    <div style="margin: 0pt; padding: 0pt; background: transparent none repeat scroll 0% 0%; font-family: monospace; font-style: normal; font-variant: normal; font-weight: normal; font-size: 1em; line-height: 1.2em; font-size-adjust: none; font-stretch: normal; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; vertical-align: top;">&nbsp; &nbsp; <span style="color: rgb(0, 153, 0);">}</span></div>
    </li>
</ol>
</div>
<p><br />
<br />
<br />
4.进入ECSHOP管理后台，选择顶部导航菜单&ldquo;商店设置&rdquo;&mdash;&mdash;&ldquo;短信设置&rdquo;，填写自己已经开通了飞信的移动手机号码及密码，并开启短信发送功能，保存。ok，在前台下个订单看看吧。</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=303" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=303</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-07-20 17:13</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=297</guid>
			<title>php根据数组自动生成可配置的数据表格</title>
			<author>admin</author>
			<description><![CDATA[<p>这个类可以用来显示按数据数组的排序输出的HTML表格。（就是能把数组类型的数据转换成为HTML表格输出）</p>
<p>它遍历二维数组，并显示其HTML表格化的数据。</p>
<p>表格的列名在表标题行是可以配置。可以自动根据点击进行行排序。自定义栏可以增加在开始或结束的位置。表格的显示可以使用CSS样式表来控制。</p>
<p>这个类可以用来从一个可查询的数据库自动生成一个数据表格。它类似于到ASP.NET的DataGrid功能。这个类支持数据列排序和全面的自定义，如改变了表格数据的模板，动态更新表格及表格数据的属性，添加自定义栏，删除一列在表格中的显示...</p>
<p><font color="#ff6600">PS：貌似很强大</font></p>
<p>This class can be used to display data from arrays in sortable HTML tables.</p>
<p>It traverses bidimensional arrays and shows its data in an HTML table.</p>
<p>The columns names in the table header row are configurable. The listing may be sorted when the user clicks on the header row cells. Custom columns may be added at the start or end of the table. The table presentation details may be configurable using CSS styles.</p>
<p>This class can be used to autogenerate a grid of data from an array which can be queried from database. It is similar to ASP.NET's DataGrid. This class supports sorting by a data column and full customizations such as changing the cell templates, changing grid and cell attributes, adding a custom column, removing a column from the grid's display...</p>
<p><font color="#ff0000" size="4">类文件 示例文件 SQL文件 下载</font>[localfile=1]</p>
<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">require</span><span>&nbsp;</span><span class="string">'DataGrid.php'</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;testInlineFunction(</span><span class="vars">$email</span><span>) &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$email</span><span>&nbsp;=&nbsp;</span><span class="func">str_replace</span><span>(</span><span class="keyword">array</span><span>(</span><span class="string">'@'</span><span>,&nbsp;</span><span class="string">'.'</span><span>),&nbsp;</span><span class="keyword">array</span><span>(</span><span class="string">'&nbsp;[at]&nbsp;'</span><span>,&nbsp;</span><span class="string">'&nbsp;[dot]&nbsp;'</span><span>),&nbsp;</span><span class="vars">$email</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$email</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>define(</span><span class="string">'DB_HOST'</span><span>,&nbsp;</span><span class="string">'localhost'</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>define(</span><span class="string">'DB_USER'</span><span>,&nbsp;</span><span class="string">'root'</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>define(</span><span class="string">'DB_PASS'</span><span>,&nbsp;</span><span class="string">'root'</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>define(</span><span class="string">'DB_NAME'</span><span>,&nbsp;</span><span class="string">'fetesample'</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$dbLinkId</span><span>&nbsp;=&nbsp;mysql_connect(DB_HOST,&nbsp;DB_USER,&nbsp;DB_PASS)&nbsp;</span><span class="keyword">or</span><span>&nbsp;</span><span class="keyword">die</span><span>(</span><span class="string">'Cannot&nbsp;create&nbsp;mysql&nbsp;connection'</span><span>&nbsp;.&nbsp;mysql_error()); &nbsp;&nbsp;</span></li>
    <li class=""><span>mysql_select_db(DB_NAME,&nbsp;</span><span class="vars">$dbLinkId</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="vars">$users</span><span>&nbsp;=&nbsp;</span><span class="keyword">array</span><span>(); &nbsp;&nbsp;</span></li>
    <li class=""><span class="vars">$result</span><span>&nbsp;=&nbsp;mysql_query(</span><span class="string">&quot;SELECT&nbsp;*&nbsp;FROM&nbsp;user&quot;</span><span>,&nbsp;</span><span class="vars">$dbLinkId</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">while</span><span>&nbsp;(</span><span class="vars">$row</span><span>&nbsp;=&nbsp;mysql_fetch_assoc(</span><span class="vars">$result</span><span>)) &nbsp;&nbsp;</span></li>
    <li class=""><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$users</span><span>[]&nbsp;=&nbsp;</span><span class="vars">$row</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>mysql_free_result(</span><span class="vars">$result</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>mysql_close(</span><span class="vars">$dbLinkId</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>?&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;html&gt;&lt;head&gt;&lt;title&gt;Fete&nbsp;DataGrid&nbsp;Example&lt;/title&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;style&gt; &nbsp;&nbsp;</span></li>
    <li class=""><span>.fdg_sortable&nbsp;{cursor:pointer;text-decoration:underline;color:#00f} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>.alterRow&nbsp;{background-color:#dfdfdf} &nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;/style&gt;&lt;/head&gt;&lt;body&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;p&gt;Click&nbsp;on&nbsp;a&nbsp;table&nbsp;header&nbsp;to&nbsp;sort&nbsp;by&nbsp;that&nbsp;column.&lt;/p&gt; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;?php &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>Fete_ViewControl_DataGrid::getInstance(</span><span class="vars">$users</span><span>) &nbsp;&nbsp;</span></li>
    <li class=""><span>-&gt;setGridAttributes(</span><span class="keyword">array</span><span>(</span><span class="string">'cellspacing'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'1'</span><span>,&nbsp;</span><span class="string">'cellpadding'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'5'</span><span>,&nbsp;</span><span class="string">'border'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'0'</span><span>))</span><span class="comment">//设置表格属性 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>-&gt;enableSorting(true)</span><span class="comment">//开启排序 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>-&gt;removeColumn(</span><span class="string">'user_id'</span><span>)</span><span class="comment">//过滤user_id字段 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>-&gt;setup(</span><span class="keyword">array</span><span>(</span><span class="comment">//配置表标题行&nbsp;就是字段内容的名称映射 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">'user_fullname'</span><span>&nbsp;=&gt;&nbsp;</span><span class="keyword">array</span><span>(</span><span class="string">'header'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'Fullname'</span><span>), &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">'user_email'</span><span>&nbsp;=&gt;&nbsp;</span><span class="keyword">array</span><span>(</span><span class="string">'header'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'Email'</span><span>,&nbsp;</span><span class="string">'cellTemplate'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'[[testInlineFunction:%data%]]'</span><span>), &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">'user_date'</span><span>&nbsp;=&gt;&nbsp;</span><span class="keyword">array</span><span>(</span><span class="string">'header'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'Date&nbsp;Registered'</span><span>,&nbsp;</span><span class="string">'cellTemplate'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'[[date:Y-m-d&nbsp;H-i-s,%data%]]'</span><span>) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>)) &nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">//增加一个操作列 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>-&gt;addColumnAfter(</span><span class="string">'actions'</span><span>,&nbsp;</span><span class="string">'&lt;a&nbsp;href=&quot;#edit.php?id=$user_id$&quot;&gt;Edit&lt;/a&gt;&nbsp;-&nbsp;&lt;a&nbsp;href=&quot;#delete.php?id=$user_id$&quot;&nbsp;onclick=&quot;return&nbsp;confirm(\'Are&nbsp;you&nbsp;sure&nbsp;you&nbsp;want&nbsp;to&nbsp;delete&nbsp;user&nbsp;$user_fullname$?\')&quot;&gt;Delete&lt;/a&gt;'</span><span>,&nbsp;</span><span class="string">'Actions'</span><span>,&nbsp;</span><span class="keyword">array</span><span>(</span><span class="string">'align'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'center'</span><span>)) &nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">//增加一个内容列，并设置align=&nbsp;'right' </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>-&gt;addColumnBefore(</span><span class="string">'counter'</span><span>,&nbsp;</span><span class="string">'%counter%.'</span><span>,&nbsp;</span><span class="string">'Counter'</span><span>,&nbsp;</span><span class="keyword">array</span><span>(</span><span class="string">'align'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'right'</span><span>)) &nbsp;&nbsp;</span></li>
    <li class=""><span>-&gt;setStartingCounter(1) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>-&gt;setRowClass(</span><span class="string">'row'</span><span>)</span><span class="comment">//增加CSS </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>-&gt;setAlterRowClass(</span><span class="string">'alterRow'</span><span>) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>-&gt;render(); &nbsp;&nbsp;</span></li>
    <li class=""><span>?&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;p&gt;If&nbsp;you&nbsp;have&nbsp;any&nbsp;suggestion&nbsp;to&nbsp;improve&nbsp;this&nbsp;</span><span class="keyword">class</span><span>'&nbsp;features,&nbsp;please&nbsp;send&nbsp;me&nbsp;an&nbsp;email&nbsp;to:&nbsp;&lt;strong&gt;me@ndthuan.com&lt;/strong&gt;.&nbsp;Thanks.&lt;/p&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;/body&gt; &nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;/html&gt;&nbsp;&nbsp;</span></li>
</ol>
</div><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=297" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=297</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-06-29 18:07</pubDate>
		</item>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=294</guid>
			<title>php的高亮显示文本内容的类</title>
			<author>admin</author>
			<description><![CDATA[<p>这个类可以用来在HTML突出关键词。</p>
<p>它可以搜索一个HTML字符串中指定关键字的文本。</p>
<p>类可以环绕的案文的关键字，发现了HTML标记，使这些关键字加以强调。</p>
<p>ps：其实就是找到英文关键字然后高亮显示。</p>
<p>This class can be used to highlight keywords within HTML.</p>
<p>It can search an HTML string for given keywords in the text.</p>
<p>The class can surround the text of the keywords that are found with HTML tags that make those keywords be highlighted.</p>
<p>没有示例 直接上类文件</p>
<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>&lt;?php &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">/*&nbsp; </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;Copyright&nbsp;(c)&nbsp;2009&nbsp;Nguyen&nbsp;Duc&nbsp;Thuan&nbsp;&lt;me@ndthuan.com&gt; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;All&nbsp;rights&nbsp;reserved. </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;Text&nbsp;highlighter&nbsp;without&nbsp;affecting&nbsp;HTML&nbsp;tags.&nbsp;This&nbsp;class&nbsp;supports&nbsp;highlighting </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;string&nbsp;in&nbsp;the&nbsp;double&nbsp;quotes&nbsp;of&nbsp;keyword&nbsp;for&nbsp;compatibility&nbsp;with&nbsp;some&nbsp;search&nbsp;methods&nbsp;such&nbsp;as </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;MySQL&nbsp;Full-text&nbsp;search,&nbsp;Google,&nbsp;Yahoo... </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;* </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;Sample&nbsp;usage: </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;-&nbsp;Method&nbsp;1: </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$highlightedString&nbsp;=&nbsp;Fete_Util_Text_Highlighter::createInstance('&lt;b&gt;',&nbsp;'&lt;/b&gt;')-&gt;highlight('PHP&nbsp;rules',&nbsp;'rules'); </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;-&nbsp;Method&nbsp;2: </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$highlighter&nbsp;=&nbsp;new&nbsp;Fete_Util_Text_Highlighter(); </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$highlightedString&nbsp;=&nbsp;$highlighter-&gt;setBeforeMatch('&lt;b&gt;') </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;setAfterMatch('&lt;/b&gt;') </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;highlight('PHP&nbsp;rules&nbsp;the&nbsp;world',&nbsp;'&quot;PHP&nbsp;rules&quot;'); </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;* </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;Nguyen&nbsp;Duc&nbsp;Thuan&nbsp;&lt;me@ndthuan.com&gt; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">class</span><span>&nbsp;Fete_Util_Text_Highlighter &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;string </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;</span><span class="vars">$_beforeMatch</span><span>&nbsp;=&nbsp;</span><span class="string">'&lt;span&nbsp;style=&quot;background-color:yellow&quot;&gt;'</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;string </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;</span><span class="vars">$_afterMatch</span><span>&nbsp;=&nbsp;</span><span class="string">'&lt;/span&gt;'</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;$beforeMatch </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;$afterMatch </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">function</span><span>&nbsp;__construct(</span><span class="vars">$beforeMatch</span><span>&nbsp;=&nbsp;null,&nbsp;</span><span class="vars">$afterMatch</span><span>&nbsp;=&nbsp;null) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(null&nbsp;!==&nbsp;</span><span class="vars">$beforeMatch</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;_beforeMatch&nbsp;=&nbsp;</span><span class="vars">$beforeMatch</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(null&nbsp;!==&nbsp;</span><span class="vars">$afterMatch</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;_afterMatch&nbsp;=&nbsp;</span><span class="vars">$afterMatch</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;$beforeMatch </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;$afterMatch </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;Fete_Util_Text_Highlighter </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">function</span><span>&nbsp;createInstance(</span><span class="vars">$beforeMatch</span><span>&nbsp;=&nbsp;null,&nbsp;</span><span class="vars">$afterMatch</span><span>&nbsp;=&nbsp;null) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;self(</span><span class="vars">$beforeMatch</span><span>,&nbsp;</span><span class="vars">$afterMatch</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;$beforeMatch </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;Fete_Util_Text_Highlighter </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">function</span><span>&nbsp;&amp;setBeforeMatch(</span><span class="vars">$beforeMatch</span><span>) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;_beforeMatch&nbsp;=&nbsp;</span><span class="vars">$beforeMatch</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$this</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;$afterMatch </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;Fete_Util_Text_Highlighter </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">function</span><span>&nbsp;&amp;setAfterMatch(</span><span class="vars">$afterMatch</span><span>) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$this</span><span>-&gt;_afterMatch&nbsp;=&nbsp;</span><span class="vars">$afterMatch</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$this</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;$text </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;$keyword </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string&nbsp;highlighted&nbsp;string </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">function</span><span>&nbsp;highlight(</span><span class="vars">$text</span><span>,&nbsp;</span><span class="vars">$keyword</span><span>) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$output</span><span>&nbsp;=&nbsp;</span><span class="string">''</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$words</span><span>&nbsp;=&nbsp;</span><span class="keyword">array</span><span>(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preg_match_all(</span><span class="string">'#(?:&quot;([^&quot;]+)&quot;|(?:[^\s\+\-&quot;\(\)&gt;&lt;~\*\'\|\\`\!@\#\$%^&amp;_=\[\]\{\}:;,\./\?]+))#si'</span><span>,&nbsp;</span><span class="vars">$keyword</span><span>,&nbsp;</span><span class="vars">$matches</span><span>,&nbsp;PREG_SET_ORDER); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">foreach</span><span>&nbsp;(</span><span class="vars">$matches</span><span>&nbsp;</span><span class="keyword">as</span><span>&nbsp;</span><span class="vars">$match</span><span>) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(2&nbsp;===&nbsp;</span><span class="func">count</span><span>(</span><span class="vars">$match</span><span>))&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$words</span><span>[]&nbsp;=&nbsp;</span><span class="vars">$match</span><span>[1]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$words</span><span>[]&nbsp;=&nbsp;</span><span class="vars">$match</span><span>[0]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$words</span><span>&nbsp;=&nbsp;implode(</span><span class="string">'|'</span><span>,&nbsp;</span><span class="vars">$words</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$textParts</span><span>&nbsp;=&nbsp;preg_split(</span><span class="string">'#(&lt;script[^&gt;]*&gt;.*?&lt;/script&gt;|&lt;style[^&gt;]*&gt;.*?&lt;/style&gt;|&lt;.+?&gt;)#si'</span><span>,&nbsp;</span><span class="vars">$text</span><span>,&nbsp;-1,&nbsp;PREG_SPLIT_DELIM_CAPTURE); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">foreach</span><span>&nbsp;(</span><span class="vars">$textParts</span><span>&nbsp;</span><span class="keyword">as</span><span>&nbsp;</span><span class="vars">$byHtmlPart</span><span>) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(!</span><span class="func">empty</span><span class="keyword">empty</span><span>(</span><span class="vars">$byHtmlPart</span><span>)&nbsp;&amp;&amp;&nbsp;</span><span class="vars">$byHtmlPart</span><span>{0}&nbsp;!=&nbsp;</span><span class="string">'&lt;'</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$byHtmlPart</span><span>&nbsp;=&nbsp;preg_replace(</span><span class="string">'#('</span><span>&nbsp;.&nbsp;</span><span class="vars">$words</span><span>&nbsp;.&nbsp;</span><span class="string">')#si'</span><span>,&nbsp;</span><span class="vars">$this</span><span>-&gt;_beforeMatch&nbsp;.&nbsp;</span><span class="string">'\1'</span><span>&nbsp;.&nbsp;</span><span class="vars">$this</span><span>-&gt;_afterMatch,&nbsp;</span><span class="vars">$byHtmlPart</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$output</span><span>&nbsp;.=&nbsp;</span><span class="vars">$byHtmlPart</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="vars">$output</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
</ol>
</div><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=294" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=294</link>
			<category domain="http://www.ax.net.cn/?cid=8">php</category>
			<pubDate>2009-06-26 22:44</pubDate>
		</item>
	</channel>
</rss>
