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


Posted in PHP onApril 30, 2010

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 文档每次都会有新的收获。

PHP 相关文章推荐
小偷PHP+Html+缓存
Dec 20 PHP
PHP 小心urldecode引发的SQL注入漏洞
Oct 27 PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
Dec 16 PHP
php计算两个整数的最大公约数常用算法小结
Mar 05 PHP
php简单图像创建入门实例
Jun 10 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 PHP
thinkPHP框架实现生成条形码的方法示例
Jun 06 PHP
php 将字符串按大写字母分隔成字符串数组
Apr 30 #PHP
mayfish 数据入库验证代码
Apr 30 #PHP
在PHP中操作Excel实例代码
Apr 29 #PHP
PHP 图片上传实现代码 带详细注释
Apr 29 #PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 #PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 #PHP
PHP 文件上传全攻略
Apr 28 #PHP
You might like
php部分常见问题总结
2008/03/27 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
分享一个asp.net pager分页控件
2012/01/04 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
2013/05/07 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
Python中用altzone()方法处理时区的教程
2015/05/22 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
python 以16进制打印输出的方法
2018/07/09 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
python小项目之五子棋游戏
2019/12/26 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
keras 多gpu并行运行案例
2020/06/10 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
音乐学个人的自荐书范文
2013/11/26 职场文书
离职告别感言
2015/08/04 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL