一些被忽视的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聊天室技术
Oct 09 PHP
php获取mysql版本的几种方法小结
Mar 25 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
Jul 03 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
Jul 05 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
跟我学Laravel之视图 &amp; Response
Oct 15 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
Sep 30 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
May 28 PHP
thinkphp 获取控制器及控制器方法
Apr 16 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/09/11 PHP
PHP中读写文件实现代码
2011/10/20 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
javascript 二分法(数组array)
2010/04/24 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
2010/11/16 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
微信小程序页面滑动屏幕加载数据效果
2020/11/16 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
Vue2.x通用编辑组件的封装及应用详解
2019/05/28 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
下载糗事百科的内容_python版
2008/12/07 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
python实现简易动态时钟
2018/11/19 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
浅析Python 多行匹配模式
2020/07/24 Python
django跳转页面传参的实现
2020/09/17 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
动物学专业毕业生求职信
2013/10/11 职场文书
教师实习的自我鉴定
2013/10/26 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
2014年小学工作总结
2014/11/26 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers