欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

一些被忽视的PHP函数(简单整理)

程序员文章站 2022-10-06 09:12:41
sys_getloadavg() 这个函数返回当前系统的负载均值信息(当然 windows 下不适用),详细文档可以翻阅 php 的相关文档。文档中有段示例代码,基本上也就...
sys_getloadavg()
这个函数返回当前系统的负载均值信息(当然 windows 下不适用),详细文档可以翻阅 php 的相关文档。文档中有段示例代码,基本上也就能看出它的用途了。
复制代码 代码如下:

<?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 环境中没有这个函数,可以考虑使用下面这段代码 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);
}
}

这一特性如果使用得当,能减轻服务器部分压力。

pack()
pack 对应的还有个函数为 unpack,用于压缩二进制串,文中的作者的示例非常清楚

$pass_hash = pack("h*", md5("my-password"));如果你使用 php5,那么可以直接这样子

$pass_hash = md5("my-password", true); // php 5+这样做的好处之一是能减少串存储空间(能节省多少呢?可能又会是另篇文章了)。

这里还有个示例代码可以 pack 数组 via
复制代码 代码如下:

<?php
function pack_array($v,$a) {
return call_user_func_array(pack,array_merge(array($v),(array)$a));
}

cal_days_in_month()

该函数可以直接返回指定月份中的天数,例如

$days = cal_days_in_month(cal_gregorian, date("m"), date("y")); // 31我敢保证,你自己实现过类似功能的函数 :^)

_()
呃,这的确也是个 php 函数(也有可能是最短的 php 内置函数)。_() 是它的“小名”,它的大名是 gettext()。

写过 wordpress 皮肤的朋友会了解 __() 以及 _e() 这些函数,其实 php 早已经自带了相关的功能。
复制代码 代码如下:

// 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 可以编写多语言的应用,现在您感兴趣的可能就是如何编写 locale 文件,这但已经不是此文涉及的重点,更多信息可以移步到这里。

get_browser()
坦白讲,见到这个函数我当时就彻底泪奔。有了这个函数,再也不用自己去分析 $_server['http_user_agent'] 这个字符串了。

更多的信息可以参考这里。在使用此函数前,你可能需要个 browscap.ini 配置文件,相信你可以搞定的。

debug_print_backtrace()
以前查看函数调用堆栈,我会使用 xdebug 等的扩展,其实 php5 版本以后已经内置了相关的函数。

顺便再分享个“蛋疼”的小技巧,如果你记不住这个函数的名字,可以用这段代码同样能达到目的(看起来还是记住那个函数靠谱):
复制代码 代码如下:

<?php
$e = new exception();
print_r(str_replace('/path/to/code/', '', $e->gettraceasstring()));natsort()
这个函数用于自然排序,这个大家可能都要用到。贴下相关的文档链接以及示例代码

$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
# )有关自然排序的算法规则,可以参考这里的文档。

glob()
这个函数的功能同样让人感到泪奔,先不说功能直接上示例代码
复制代码 代码如下:

foreach (glob("*.php") as $file) {
echo "$file\n";
}

相比你已经了解该函数的用途了,那么我们就可以有更多的“玩法”,例如就显示目录(via):

$dirs = array_filter(glob($path.'*'), 'is_dir');当然,文件递归你也可以考虑使用下 spl 扩展。

补充 by 神仙:

glob 有个参数选项 glob_onlydir 就可以只列目录php filter
如果你还在正则验证字符串,那么就真的“out”了。自 php5.2 版本以后,内置了 php fliter 模块用于专门验证 电子邮件、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)但这不影响我们去尝试。有关 php filter 的更多信息,相信能拎出来另外写篇文章了。

-- split --

最后,感叹 php 其实是个历久弥新的工具,不小心我们就会悲剧性得重复造了只*。因此,时常看看 php 文档每次都会有新的收获。