一些被忽視的PHP函數(shù)(簡(jiǎn)單整理)
更新時(shí)間:2010年04月30日 16:09:17 作者:
真的是不用不知道,其實(shí)我們熟悉的 PHP 還有很多好東西沒有發(fā)掘??吹竭@篇文章,當(dāng)時(shí)就淚奔了好幾回,重點(diǎn)推薦下,順便我自己也做個(gè)整理。
sys_getloadavg()
這個(gè)函數(shù)返回當(dāng)前系統(tǒng)的負(fù)載均值信息(當(dāng)然 Windows 下不適用),詳細(xì)文檔可以翻閱 PHP 的相關(guān)文檔。文檔中有段示例代碼,基本上也就能看出它的用途了。
<?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.');
}
PS,如果“很不幸”得你的 PHP 環(huán)境中沒有這個(gè)函數(shù),可以考慮使用下面這段代碼 via
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);
}
}
這一特性如果使用得當(dāng),能減輕服務(wù)器部分壓力。
pack()
pack 對(duì)應(yīng)的還有個(gè)函數(shù)為 unpack,用于壓縮二進(jìn)制串,文中的作者的示例非常清楚
$pass_hash = pack("H*", md5("my-password"));如果你使用 PHP5,那么可以直接這樣子
$pass_hash = md5("my-password", true); // PHP 5+這樣做的好處之一是能減少串存儲(chǔ)空間(能節(jié)省多少呢?可能又會(huì)是另篇文章了)。
這里還有個(gè)示例代碼可以 pack 數(shù)組 via
<?php
function pack_array($v,$a) {
return call_user_func_array(pack,array_merge(array($v),(array)$a));
}
cal_days_in_month()
該函數(shù)可以直接返回指定月份中的天數(shù),例如
$days = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y")); // 31我敢保證,你自己實(shí)現(xiàn)過類似功能的函數(shù) :^)
_()
呃,這的確也是個(gè) PHP 函數(shù)(也有可能是最短的 PHP 內(nèi)置函數(shù))。_() 是它的“小名”,它的大名是 gettext()。
寫過 Wordpress 皮膚的朋友會(huì)了解 __() 以及 _e() 這些函數(shù),其實(shí) PHP 早已經(jīng)自帶了相關(guān)的功能。
// 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");
利用 gettext 可以編寫多語言的應(yīng)用,現(xiàn)在您感興趣的可能就是如何編寫 locale 文件,這但已經(jīng)不是此文涉及的重點(diǎn),更多信息可以移步到這里。
get_browser()
坦白講,見到這個(gè)函數(shù)我當(dāng)時(shí)就徹底淚奔。有了這個(gè)函數(shù),再也不用自己去分析 $_SERVER['HTTP_USER_AGENT'] 這個(gè)字符串了。
更多的信息可以參考這里。在使用此函數(shù)前,你可能需要個(gè) browscap.ini 配置文件,相信你可以搞定的。
debug_print_backtrace()
以前查看函數(shù)調(diào)用堆棧,我會(huì)使用 xdebug 等的擴(kuò)展,其實(shí) PHP5 版本以后已經(jīng)內(nèi)置了相關(guān)的函數(shù)。
順便再分享個(gè)“蛋疼”的小技巧,如果你記不住這個(gè)函數(shù)的名字,可以用這段代碼同樣能達(dá)到目的(看起來還是記住那個(gè)函數(shù)靠譜):
<?php
$e = new Exception();
print_r(str_replace('/path/to/code/', '', $e->getTraceAsString()));natsort()
這個(gè)函數(shù)用于自然排序,這個(gè)大家可能都要用到。貼下相關(guān)的文檔鏈接以及示例代碼
$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
# )有關(guān)自然排序的算法規(guī)則,可以參考這里的文檔。
glob()
這個(gè)函數(shù)的功能同樣讓人感到淚奔,先不說功能直接上示例代碼
foreach (glob("*.php") as $file) {
echo "$file\n";
}
相比你已經(jīng)了解該函數(shù)的用途了,那么我們就可以有更多的“玩法”,例如就顯示目錄(via):
$dirs = array_filter(glob($path.'*'), 'is_dir');當(dāng)然,文件遞歸你也可以考慮使用下 SPL 擴(kuò)展。
補(bǔ)充 by 神仙:
glob 有個(gè)參數(shù)選項(xiàng) GLOB_ONLYDIR 就可以只列目錄PHP Filter
如果你還在正則驗(yàn)證字符串,那么就真的“Out”了。自 PHP5.2 版本以后,內(nèi)置了 PHP Fliter 模塊用于專門驗(yàn)證 電子郵件、URL 等是否合法,示例代碼:
var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));由于是新生的模塊,因此還有很多的陷阱,例如
filter_var('abc', FILTER_VALIDATE_BOOLEAN); // bool(false)
filter_var('0', FILTER_VALIDATE_BOOLEAN); // bool(false)但這不影響我們?nèi)L試。有關(guān) PHP Filter 的更多信息,相信能拎出來另外寫篇文章了。
-- Split --
最后,感嘆 PHP 其實(shí)是個(gè)歷久彌新的工具,不小心我們就會(huì)悲劇性得重復(fù)造了只輪子。因此,時(shí)??纯?PHP 文檔每次都會(huì)有新的收獲。
這個(gè)函數(shù)返回當(dāng)前系統(tǒng)的負(fù)載均值信息(當(dāng)然 Windows 下不適用),詳細(xì)文檔可以翻閱 PHP 的相關(guān)文檔。文檔中有段示例代碼,基本上也就能看出它的用途了。
復(fù)制代碼 代碼如下:
<?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.');
}
PS,如果“很不幸”得你的 PHP 環(huán)境中沒有這個(gè)函數(shù),可以考慮使用下面這段代碼 via
復(fù)制代碼 代碼如下:
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);
}
}
這一特性如果使用得當(dāng),能減輕服務(wù)器部分壓力。
pack()
pack 對(duì)應(yīng)的還有個(gè)函數(shù)為 unpack,用于壓縮二進(jìn)制串,文中的作者的示例非常清楚
$pass_hash = pack("H*", md5("my-password"));如果你使用 PHP5,那么可以直接這樣子
$pass_hash = md5("my-password", true); // PHP 5+這樣做的好處之一是能減少串存儲(chǔ)空間(能節(jié)省多少呢?可能又會(huì)是另篇文章了)。
這里還有個(gè)示例代碼可以 pack 數(shù)組 via
復(fù)制代碼 代碼如下:
<?php
function pack_array($v,$a) {
return call_user_func_array(pack,array_merge(array($v),(array)$a));
}
cal_days_in_month()
該函數(shù)可以直接返回指定月份中的天數(shù),例如
$days = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y")); // 31我敢保證,你自己實(shí)現(xiàn)過類似功能的函數(shù) :^)
_()
呃,這的確也是個(gè) PHP 函數(shù)(也有可能是最短的 PHP 內(nèi)置函數(shù))。_() 是它的“小名”,它的大名是 gettext()。
寫過 Wordpress 皮膚的朋友會(huì)了解 __() 以及 _e() 這些函數(shù),其實(shí) PHP 早已經(jīng)自帶了相關(guān)的功能。
復(fù)制代碼 代碼如下:
// 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");
利用 gettext 可以編寫多語言的應(yīng)用,現(xiàn)在您感興趣的可能就是如何編寫 locale 文件,這但已經(jīng)不是此文涉及的重點(diǎn),更多信息可以移步到這里。
get_browser()
坦白講,見到這個(gè)函數(shù)我當(dāng)時(shí)就徹底淚奔。有了這個(gè)函數(shù),再也不用自己去分析 $_SERVER['HTTP_USER_AGENT'] 這個(gè)字符串了。
更多的信息可以參考這里。在使用此函數(shù)前,你可能需要個(gè) browscap.ini 配置文件,相信你可以搞定的。
debug_print_backtrace()
以前查看函數(shù)調(diào)用堆棧,我會(huì)使用 xdebug 等的擴(kuò)展,其實(shí) PHP5 版本以后已經(jīng)內(nèi)置了相關(guān)的函數(shù)。
順便再分享個(gè)“蛋疼”的小技巧,如果你記不住這個(gè)函數(shù)的名字,可以用這段代碼同樣能達(dá)到目的(看起來還是記住那個(gè)函數(shù)靠譜):
復(fù)制代碼 代碼如下:
<?php
$e = new Exception();
print_r(str_replace('/path/to/code/', '', $e->getTraceAsString()));natsort()
這個(gè)函數(shù)用于自然排序,這個(gè)大家可能都要用到。貼下相關(guān)的文檔鏈接以及示例代碼
$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
# )有關(guān)自然排序的算法規(guī)則,可以參考這里的文檔。
glob()
這個(gè)函數(shù)的功能同樣讓人感到淚奔,先不說功能直接上示例代碼
復(fù)制代碼 代碼如下:
foreach (glob("*.php") as $file) {
echo "$file\n";
}
相比你已經(jīng)了解該函數(shù)的用途了,那么我們就可以有更多的“玩法”,例如就顯示目錄(via):
$dirs = array_filter(glob($path.'*'), 'is_dir');當(dāng)然,文件遞歸你也可以考慮使用下 SPL 擴(kuò)展。
補(bǔ)充 by 神仙:
glob 有個(gè)參數(shù)選項(xiàng) GLOB_ONLYDIR 就可以只列目錄PHP Filter
如果你還在正則驗(yàn)證字符串,那么就真的“Out”了。自 PHP5.2 版本以后,內(nèi)置了 PHP Fliter 模塊用于專門驗(yàn)證 電子郵件、URL 等是否合法,示例代碼:
var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));由于是新生的模塊,因此還有很多的陷阱,例如
filter_var('abc', FILTER_VALIDATE_BOOLEAN); // bool(false)
filter_var('0', FILTER_VALIDATE_BOOLEAN); // bool(false)但這不影響我們?nèi)L試。有關(guān) PHP Filter 的更多信息,相信能拎出來另外寫篇文章了。
-- Split --
最后,感嘆 PHP 其實(shí)是個(gè)歷久彌新的工具,不小心我們就會(huì)悲劇性得重復(fù)造了只輪子。因此,時(shí)??纯?PHP 文檔每次都會(huì)有新的收獲。
相關(guān)文章
php5 pdo新改動(dòng)加載注意事項(xiàng)
想試試pdo怎么用,把 extension=php_pdo_mssql.dll extension=php_pdo_mysql.dll2008-09-09PHP中addslashes與mysql_escape_string的區(qū)別分析
這篇文章主要介紹了PHP中addslashes與mysql_escape_string的區(qū)別,簡(jiǎn)單分析了addslashes與mysql_escape_string在使用過程中的區(qū)別,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-04-04用PHP實(shí)現(xiàn)Ftp用戶的在線管理的代碼
用PHP實(shí)現(xiàn)Ftp用戶的在線管理的代碼...2007-03-03php圖片處理:加水印、縮略圖的實(shí)現(xiàn)(自定義函數(shù):watermark、thumbnail)
圖片處理:加水印、縮略圖的實(shí)現(xiàn)(自定義函數(shù):watermark、thumbnail)代碼有點(diǎn)長(zhǎng),但不復(fù)雜。2010-12-12php將數(shù)組轉(zhuǎn)換成csv格式文件輸出的方法
這篇文章主要介紹了php將數(shù)組轉(zhuǎn)換成csv格式文件輸出的方法,涉及php操作csv文件的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03