来自:http://www.gracecode.com/posts/3013.html
真的是不用不知道,其实我们熟悉的 PHP 还有很多好东西没有发掘。 看到这篇文章 ,当时就泪奔了好几回,重点推荐下,顺便我自己也做个整理。
sys_getloadavg()
这个函数 返回当前 系统的负载均值信息 (当然 Windows 下不适用),详细文档可以翻阅 PHP 的相关文档。文档中有段示例代码,基本上也就能看出它的用途了。
<codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto><a style="color:#f60; text-decoration:underline;" title="php" href="https://www.php.cn/zt/15714.html" target="_blank">php</a>
$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.');
}
<p>PS,如果「很不幸」得你的 PHP 环境中没有这个函数,可以考虑使用下面这段代码 via</p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>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);
}
}
<p>这一特性如果使用得当,能减轻服务器部分压力。</p>
<p><span>立即学习</span>“<a href="https://pan.quark.cn/s/7fc7563c4182" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">PHP免费学习笔记(深入)</a>”;</p>
<p>pack()</p>
<p>pack 对应的还有个函数为 unpack ,用于压缩二进制串,文中的作者的示例非常清楚</p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>$pass_hash = pack("H*", md5("my-password"));
<p>如果你使用 PHP5,那么可以直接这样子</p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>$pass_hash = md5("my-password", true); // PHP 5+
<p>这样做的好处之一是能减少串存储空间(能节省多少呢?可能又会是另篇文章了)。</p>
<p>这里还有个示例代码可以 pack 数组 via</p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto><?php function pack_array($v,$a) {
return call_user_func_array(pack,array_merge(array($v),(array)$a));
}
<p>cal_days_in_month()<p>该函数 可以直接返回指定月份中的天数,例如</p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>$days = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y")); // 31
<p>我敢保证, 你自己实现过类似功能的函数 :^)</p>
<p>_()</p>
<p>呃, 这的确也是个 PHP 函数 (也有可能是最短的 PHP 内置函数)。<codecourier new white-space:pre-wrap word-wrap:break-word font-size:0.9em line-height:normal overflow-x:auto>_() 是它的「小名」,它的大名是 <codecourier new white-space:pre-wrap word-wrap:break-word font-size:0.9em line-height:normal overflow-x:auto>gettext()。</codecourier></codecourier></p>
<p>写过 Wordpress 皮肤的朋友会了解 <codecourier new white-space:pre-wrap word-wrap:break-word font-size:0.9em line-height:normal overflow-x:auto>__() 以及 <codecourier new white-space:pre-wrap word-wrap:break-word font-size:0.9em line-height:normal overflow-x:auto>_e() 这些函数,其实
PHP 早已经自带了相关的功能。</codecourier></codecourier></p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>// 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");
<p>利用 gettext 可以编写多语言的应用,现在您感兴趣的可能就是如何编写 locale 文件,这但已经不是此文涉及的重点, 更多信息可以移步到这里 。</p>
<p>get_browser()</p>
<p>坦白讲,见到 这个函数 我当时就彻底泪奔。有了这个函数,再也不用自己去分析 <codecourier new white-space:pre-wrap word-wrap:break-word font-size:0.9em line-height:normal overflow-x:auto>$_SERVER['HTTP_USER_AGENT'] 这个字符串了。</codecourier></p>
<p>更多的信息可以参考这里。在使用此函数前, 你可能需要个 browscap.ini 配置文件 ,相信你可以搞定的。</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/code/10950" title="MediPro网上书店系统"><img
src="https://img.php.cn/upload/webcode/000/000/005/176440500710255.jpg" alt="MediPro网上书店系统" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/code/10950" title="MediPro网上书店系统">MediPro网上书店系统</a>
<p>基于PHP+MYSQL开发,除了网上书店必备的商品管理、配送支付管理、订单管理、会员分组、会员管理、查询统计和多项商品促销功能,还具有完整的文章、图文、下载、单页、广告发布等网站内容管理功能。系统具有静态HTML生成、UTF-8多语言支持、可视化模版引擎等技术特点,支持多频道调用不同模版和任意设置频道首页,适合建立各种规模的网上书店。系统具有以下主要功能模块: 网站参数设置 - 对网站的一些参数进</p>
</div>
<a href="/xiazai/code/10950" title="MediPro网上书店系统" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div>
<p>debug_print_backtrace()</p>
<p>以前查看函数调用堆栈,我会使用 xdebug 等的扩展,其实 PHP5 版本以后已经 内置了相关的函数 。</p>
<p>顺便再分享个「蛋疼」的小技巧 ,如果你记不住这个函数的名字,可以用这段代码同样能达到目的(看起来还是记住那个函数靠谱):</p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto><?php $e = new Exception();
print_r(str_replace('/path/to/code/', '', $e->getTraceAsString()));
<p>natsort()</p>
<p>这个函数用于 自然排序 ,这个大家可能都要用到。贴下相关的文档链接以及示例代码</p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>$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
# )
<p>有关自然排序的算法规则,可以 参考这里的文档 。</p>
<p>glob()</p>
<p>这个 函数的功能 同样让人感到泪奔,先不说功能直接上示例代码</p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>foreach (glob("*.php") as $file) {
echo "$file\n";
}
<p>相比你已经了解该函数的用途了,那么我们就可以有更多的「玩法」,例如就显示目录( via ):</p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>$dirs = array_filter(glob($path.'*'), 'is_dir');
<p>当然,文件递归你也可以 考虑使用下 SPL 扩展 。</p>
<p>补充 by 神仙 :</p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>glob 有个参数选项 GLOB_ONLYDIR 就可以只列目录
<p>PHP Filter</p>
<p>如果你还在正则验证字符串,那么就真的「Out」了。自 PHP5.2 版本以后, 内置了 PHP Fliter
模块 用于专门验证 电子邮件、URL 等是否合法,示例代码:</p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
<p>由于是新生的模块,因此还有很多的陷阱,例如</p>
<pre class="brush:php;toolbar:false;" courier new white-space:pre-wrap word-wrap:break-word border:1px solid rgb font-size:0.9em overflow-x:auto color:rgb background-color:rgb><codecourier new word-wrap:break-word font-size:0.9em overflow-x:auto>filter_var('abc', FILTER_VALIDATE_BOOLEAN); // bool(false)
filter_var('0', FILTER_VALIDATE_BOOLEAN); // bool(false)
<p>但这不影响我们去尝试。有关 PHP Filter 的更多信息,相信能拎出来另外写篇文章了。</p>
<p><codecourier new white-space:pre-wrap word-wrap:break-word font-size:0.9em line-height:normal overflow-x:auto>-- Split --</codecourier></p>
<p>最后,感叹 PHP 其实是个历久弥新的工具,不小心我们就会悲剧性得重复造了只轮子。因此,时常看看 PHP 文档每次都会有新的收获。</p>
<br><p>
以上就介绍了一些被忽视的 PHP 函数(整理),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。</p>
<p>
</p>
</codecourier>










