來自:http://www.gracecode.com/posts/3013.html
真的是不用不知道,其實我們熟悉的 PHP 還有很多好東西沒有發掘。 看到這篇文章 ,當時就淚奔了好幾回,重點推薦下,順便我自己也做個整理。
sys_getloadavg()
這個函數 回傳目前 系統的負載平均值資訊 (當然
Windows 下不適用),詳細文件可以翻閱 PHP 的相關文件。文件中有段落範例程式碼,基本上也就能看出它的用途了。
<codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto><?php
$load = sys_getloadavg();
if ($load[0] > 80) {
header('HTTP/1.1 503 Too busy, try again later');
die('Server too busy. Please try again later.');
}
<p>PS,如果「很不幸」得你的 PHP 環境中沒有這個函數,可以考慮使用下面這段程式碼 via</p>
<precourier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>if (!function_exists('sys_getloadavg')) {
function sys_getloadavg()
{
$loadavg_file = '/proc/loadavg';
if (file_exists($loadavg_file)) {
return explode(chr(32),file_get_contents($loadavg_file));
}
return array(0,0,0);
}
}
<p>這一特性如果使用得當,能減輕伺服器部分壓力。 </p>
<p>pack()</p>
<p>pack 對應的還有個函數為 unpack ,用於壓縮二進位串,文中的作者的例子非常清楚</p>
<precourier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>$pass_hash = pack("H*", md5("my-password"));
<p>如果你使用PHP5,那麼可以直接這樣子</p>
<precourier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>$pass_hash = md5("my-password", true); // PHP 5+
<p>這樣做的好處之一是能減少串聯儲存空間(能節省多少呢?可能又會是另篇文章了)。 </p>
<p>這裡還有個範例程式碼可以pack 陣列 via</p>
<precourier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto><?php
function pack_array($v,$a) {
return call_user_func_array(pack,array_merge(array($v),(array)$a));
}
</code>登入後複製
cal_days_in_month()
該函數 可以直接回傳指定月份中的天數,例如
<codeCourier New',sans-serif; word-wrap:break-word; font-size:0.9em; overflow-x:auto">$days = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y")); // 31
</code>登入後複製
我敢保證, 可以直接傳回指定月份中的天數,例如
<codeCourier New',sans-serif; word-wrap:break-word; font-size:0.9em; overflow-x:auto">// Set language to German
setlocale(LC_ALL, 'de_DE');
// Specify location of translation tables
bindtextdomain("myPHPApp", "./locale");
// Choose domain
textdomain("myPHPApp");
echo _("Have a nice day");
</code>登入後複製
我敢保證, 你實作過類似函式的函數
_()呃, 這的確也是個PHP 函數 (也有可能是最短的PHP 內建函數)。 _() 是它的「小名」,它的大名是
gettext()
。 寫過 Wordpress 皮膚的朋友會了解 __() 以及
_e()
這些函數,其實
PHP 早已經自備了相關的功能。
getTraceAsString()));
利用 gettext 可以編寫多語言的應用,現在您感興趣的可能就是如何編寫 locale 文件,這但已經不是此文涉及的重點, 更多信息可以移步到這裡 。
get_browser()坦白講,見到 這個函數 我當時就徹底淚奔。有了這個函數,再也不用自己去分析
$_SERVER['HTTP_USER_AGENT'] 這個字串了。
更多的資訊可以參考這裡。在使用此函數前, 你可能需要個 browscap.ini 設定檔 ,相信你可以搞定的。
debug_print_backtrace()
以前查看函數呼叫堆疊,我會使用 xdebug 等的擴展,其實 PHP5 版本以後已經 內建了相關的函數 。
順便再分享個「蛋痛」的小技巧 ,如果你記不住這個函數的名字,可以用這段程式碼同樣能達到目的(看起來還是記得那個函數可靠):
$items = array("100 apples", "5 apples", "110 apples", "55 apples");
// normal sorting:
sort($items);
print_r($items);
# Outputs:
# Array
# (
# [0] => 100 apples
# [1] => 110 apples
# [2] => 5 apples
# [3] => 55 apples
# )
natsort($items);
print_r($items);
# Outputs:
# Array
# (
# [2] => 5 apples
# [3] => 55 apples
# [0] => 100 apples
# [1] => 110 apples
# )
natsort( )
這個函數用來 自然排序 ,這個大家可能都要用到。貼上相關的文件連結以及範例程式碼
foreach (glob("*.php") as $file) {
echo "$file\n";
}
有關自然排序的演算法規則,可以 參考這裡的文件 。
glob()
這個 函數的功能 同樣讓人感到淚奔,先不說功能直接上示例代碼
$dirs = array_filter(glob($path.'*'), 'is_dir');
相比你已經了解該函數的用途了,那麼我們就可以有更多的“玩法」,例如就顯示目錄( via ):
glob 有个参数选项 GLOB_ONLYDIR 就可以只列目录
當然,文件遞歸你也可以 考慮使用下SPL 擴充 。
補充 by 神仙 :
var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
PHP Filter
如果你還在正規驗證字串,那麼就真的「Out」了。自 PHP5.2 版本以後, 內建了 PHP Fliter
模組 用於專門驗證 電子郵件、URL 等是否合法,範例程式碼:
filter_var('abc', FILTER_VALIDATE_BOOLEAN); // bool(false)
filter_var('0', FILTER_VALIDATE_BOOLEAN); // bool(false)
由於是新生的模組,因此還有很多的陷阱,例如
rrreee但這不影響我們去嘗試。有關 PHP Filter 的更多信息,相信能拎出來另外寫篇文章了。
-- Split --
最後,感嘆 PHP 其實是個歷久彌新的工具,不小心我們就會悲劇性得重複造了隻輪子。因此,時常看看 PHP 文件每次都會有新的收穫。
以上就介紹了一些被忽視的 PHP 函數(整理),包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。
🎜
🎜