一些被忽视的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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(1)
Oct 09 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
Dec 20 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 PHP
php实现aes加密类分享
Feb 16 PHP
PHP操作文件的一些基本函数使用示例
Nov 18 PHP
CI框架实现cookie登陆的方法详解
May 18 PHP
PHP实现bitmap位图排序与求交集的方法
Jul 28 PHP
laravel学习教程之存取器
Jul 30 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
php创建图像具体步骤
Mar 13 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 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
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
浅谈js基本数据类型和typeof
2016/08/09 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
几种tab切换详解
2017/02/03 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
python解析文件示例
2014/01/23 Python
python的exec、eval使用分析
2017/12/11 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
python实现计算器功能
2019/10/31 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
django 模版关闭转义方式
2020/05/14 Python
为什么说python更适合树莓派编程
2020/07/20 Python
比较基础的php面试题及答案-编程题
2012/10/14 面试题
高级工程师岗位职责
2013/12/15 职场文书
高二化学教学反思
2014/01/30 职场文书
一句话工作感言
2014/03/01 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js