<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[以前查看函数调用堆栈函数debug_print_backtrace，以及其他不常用到的函数]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Wed, 16 Jun 2010 09:32:20 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	debug_print_backtrace()<br/>以前查看函数调用堆栈，我会使用 xdebug 等的扩展，其实 PHP5 版本以后已经内置了相关的函数。<br/><br/>顺便再分享个“蛋疼”的小技巧，如果你记不住这个函数的名字，可以用这段代码同样能达到目的（看起来还是记住那个函数靠谱）：<br/><br/>&lt;?php<br/>$e = new Exception();<br/>print_r(str_replace(&#039;/path/to/code/&#039;, &#039;&#039;, $e-&gt;getTraceAsString()));<br/><br/>----------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br/>debug_print_backtrace和debug_backtrace<br/><br/>这两个函数实现相同的目的——记录php函数的调用堆栈——但是表现不同。debug_print_backtrace直接在输出内容中打印出调用堆栈内容，debug_backtrace将调用堆栈以数组的形式返回供php程序使用。<br/><br/>在我的一个数据字典载入类中debug_print_backtrace的输出如下：<br/><br/>#0 DictLoader-&gt;b2d(list_number, Array ([freepp] =&gt; 24009394,[contact] =&gt; 24005945)) called at [/var/www/freepp/DBALayer/User.php:430]<br/>#1 User-&gt;_getOneRecordOfArray(list_number, contact, 24005945) called at [/var/www/freepp/DBALayer/User.php:456]<br/>#2 User-&gt;getAContact(list_number, 24005945) called at [/var/www/freepp/freepp_b16/processADD.php:60]<br/>#3 processADD(24009394) called at [/var/www/freepp/freepp_b16/principal.php:48]<br/>#0 DictLoader-&gt;b2d(list_number, Array ([freepp] =&gt; 24005945,[contact] =&gt; 24009394)) called at [/var/www/freepp/DBALayer/User.php:430]<br/>#1 User-&gt;_getOneRecordOfArray(list_number, contact, 24009394) called at [/var/www/freepp/DBALayer/User.php:456]<br/>#2 User-&gt;getAContact(list_number, 24009394) called at [/var/www/freepp/freepp_b16/processADD.php:93]<br/>#3 processADD(24009394) called at [/var/www/freepp/freepp_b16/principal.php:48]<br/><br/>DictLoader是调用该函数的类<br/><br/><br/>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/newhappy2008/archive/2008/04/21/2313159.aspx<br/><br/><br/><br/><br/><br/>sys_getloadavg()<br/>这个函数返回当前系统的负载均值信息（当然 Windows 下不适用），详细文档可以翻阅 PHP 的相关文档。文档中有段示例代码，基本上也就能看出它的用途了。<br/><br/>&lt;?php<br/>$load = sys_getloadavg();<br/>if ($load[0] &gt; 80) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;header(&#039;HTTP/1.1 503 Too busy, try again later&#039;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;die(&#039;Server too busy. Please try again later.&#039;);<br/>&#125;PS，如果“很不幸”得你的 PHP 环境中没有这个函数，可以考虑使用下面这段代码 via<br/><br/>if (!function_exists(&#039;sys_getloadavg&#039;)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;function sys_getloadavg()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$loadavg_file = &#039;/proc/loadavg&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (file_exists($loadavg_file)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return explode(chr(32),file_get_contents($loadavg_file));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return array(0,0,0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;这一特性如果使用得当，能减轻服务器部分压力。<br/><br/>pack()<br/>pack 对应的还有个函数为 unpack，用于压缩二进制串，文中的作者的示例非常清楚<br/><br/>$pass_hash = pack(&quot;H*&quot;, md5(&quot;my-password&quot;));如果你使用 PHP5，那么可以直接这样子<br/><br/>$pass_hash = md5(&quot;my-password&quot;, true); // PHP 5+这样做的好处之一是能减少串存储空间（能节省多少呢？可能又会是另篇文章了）。<br/><br/>这里还有个示例代码可以 pack 数组 via<br/><br/>&lt;?php<br/>function pack_array($v,$a) &#123;<br/> return call_user_func_array(pack,array_merge(array($v),(array)$a));<br/>&#125;cal_days_in_month()<br/>该函数可以直接返回指定月份中的天数，例如<br/><br/>$days = cal_days_in_month(CAL_GREGORIAN, date(&quot;m&quot;), date(&quot;Y&quot;)); // 31我敢保证，你自己实现过类似功能的函数 :^)<br/><br/>_()<br/>呃，这的确也是个 PHP 函数（也有可能是最短的 PHP 内置函数）。_() 是它的“小名”，它的大名是gettext()。<br/><br/>写过 Wordpress 皮肤的朋友会了解 __() 以及 _e() 这些函数，其实 PHP 早已经自带了相关的功能。<br/><br/>// Set language to German<br/>setlocale(LC_ALL, &#039;de_DE&#039;);<br/> <br/>// Specify location of translation tables<br/>bindtextdomain(&quot;myPHPApp&quot;, &quot;./locale&quot;);<br/> <br/>// Choose domain<br/>textdomain(&quot;myPHPApp&quot;);<br/> <br/>echo _(&quot;Have a nice day&quot;);利用 gettext 可以编写多语言的应用，现在您感兴趣的可能就是如何编写 locale 文件，这但已经不是此文涉及的重点，更多信息可以移步到这里。<br/><br/>get_browser()<br/>坦白讲，见到这个函数我当时就彻底泪奔。有了这个函数，再也不用自己去分析$_SERVER[&#039;HTTP_USER_AGENT&#039;] 这个字符串了。<br/><br/>更多的信息可以参考这里。在使用此函数前，你可能需要个 browscap.ini 配置文件，相信你可以搞定的。<br/><br/>debug_print_backtrace()<br/>以前查看函数调用堆栈，我会使用 xdebug 等的扩展，其实 PHP5 版本以后已经内置了相关的函数。<br/><br/>顺便再分享个“蛋疼”的小技巧，如果你记不住这个函数的名字，可以用这段代码同样能达到目的（看起来还是记住那个函数靠谱）：<br/><br/>&lt;?php<br/>$e = new Exception();<br/>print_r(str_replace(&#039;/path/to/code/&#039;, &#039;&#039;, $e-&gt;getTraceAsString()));natsort()<br/>这个函数用于自然排序，这个大家可能都要用到。贴下相关的文档链接以及示例代码<br/><br/>$items = array(&quot;100 apples&quot;, &quot;5 apples&quot;, &quot;110 apples&quot;, &quot;55 apples&quot;);<br/> <br/>// normal sorting:<br/>sort($items);<br/>print_r($items);<br/>&nbsp;&nbsp;&nbsp;&nbsp;# Outputs:<br/>&nbsp;&nbsp;&nbsp;&nbsp;# Array<br/>&nbsp;&nbsp;&nbsp;&nbsp;# (<br/>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; [0] =&gt; 100 apples<br/>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; [1] =&gt; 110 apples<br/>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; [2] =&gt; 5 apples<br/>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; [3] =&gt; 55 apples<br/>&nbsp;&nbsp;&nbsp;&nbsp;# )<br/><br/>natsort($items);<br/>print_r($items);<br/>&nbsp;&nbsp;&nbsp;&nbsp;# Outputs:<br/>&nbsp;&nbsp;&nbsp;&nbsp;# Array<br/>&nbsp;&nbsp;&nbsp;&nbsp;# (<br/>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; [2] =&gt; 5 apples<br/>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; [3] =&gt; 55 apples<br/>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; [0] =&gt; 100 apples<br/>&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; [1] =&gt; 110 apples<br/>&nbsp;&nbsp;&nbsp;&nbsp;# )有关自然排序的算法规则，可以参考这里的文档。<br/><br/>glob()<br/>这个函数的功能同样让人感到泪奔，先不说功能直接上示例代码<br/><br/>foreach (glob(&quot;*.php&quot;) as $file) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;$file&#92;n&quot;;<br/>&#125;相比你已经了解该函数的用途了，那么我们就可以有更多的“玩法”，例如就显示目录（via）：<br/><br/>$dirs = array_filter(glob($path.&#039;*&#039;), &#039;is_dir&#039;);当然，文件递归你也可以考虑使用下 SPL 扩展。<br/><br/>PHP Filter<br/>如果你还在正则验证字符串，那么就真的“Out”了。自 PHP5.2 版本以后，内置了 PHP Fliter 模块用于专门验证 电子邮件、URL 等是否合法，示例代码：<br/><br/>var_dump(filter_var(&#039;bob@example.com&#039;, FILTER_VALIDATE_EMAIL));由于是新生的模块，因此还有很多的陷阱，例如<br/><br/>filter_var(&#039;abc&#039;, FILTER_VALIDATE_BOOLEAN); // bool(false)<br/>filter_var(&#039;0&#039;, FILTER_VALIDATE_BOOLEAN);&nbsp;&nbsp; // bool(false)但这不影响我们去尝试。有关 PHP Filter 的更多信息，相信能拎出来另外写篇文章了。<br/><br/>-- Split --<br/><br/>最后，感叹 PHP 其实是个历久弥新的工具，不小心我们就会悲剧性得重复造了只轮子。因此，时常看看 PHP 文档每次都会有新的收获。<br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 以前查看函数调用堆栈函数debug_print_backtrace，以及其他不常用到的函数]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>