`
conan_holmes
  • 浏览: 9656 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
社区版块
存档分类
最新评论

九个PHP很有用的功能(2)

    博客分类:
  • PHP
阅读更多

来源:http://coolshell.cn/?p=2394

4. CPU使用信息

使用?getrusage() 函数可以让你知道CPU的使用情况。注意,这个功能在Windows下不可用。

print_r(getrusage());
/* 输出
Array
(
    [ru_oublock] => 0
    [ru_inblock] => 0
    [ru_msgsnd] => 2
    [ru_msgrcv] => 3
    [ru_maxrss] => 12692
    [ru_ixrss] => 764
    [ru_idrss] => 3864
    [ru_minflt] => 94
    [ru_majflt] => 0
    [ru_nsignals] => 1
    [ru_nvcsw] => 67
    [ru_nivcsw] => 4
    [ru_nswap] => 0
    [ru_utime.tv_usec] => 0
    [ru_utime.tv_sec] => 0
    [ru_stime.tv_usec] => 6269
    [ru_stime.tv_sec] => 0
)

*/
 

这个结构看上出很晦涩,除非你对CPU很了解。下面一些解释:

  • ru_oublock: 块输出操作
  • ru_inblock: 块输入操作
  • ru_msgsnd: 发送的message
  • ru_msgrcv: 收到的message
  • ru_maxrss: 最大驻留集大小
  • ru_ixrss: 全部共享内存大小
  • ru_idrss:全部非共享内存大小
  • ru_minflt: 页回收
  • ru_majflt: 页失效
  • ru_nsignals: 收到的信号
  • ru_nvcsw: 主动上下文切换
  • ru_nivcsw: 被动上下文切换
  • ru_nswap: 交换区
  • ru_utime.tv_usec: 用户态时间 (microseconds)
  • ru_utime.tv_sec: 用户态时间(seconds)
  • ru_stime.tv_usec: 系统内核时间 (microseconds)
  • ru_stime.tv_sec: 系统内核时间?(seconds)

要看到你的脚本消耗了多少CPU,我们需要看看“用户态的时间”和“系统内核时间”的值。秒和微秒部分是分别提供的,您可以把微秒值除以100万,并把它添加到秒的值后,可以得到有小数部分的秒数。

// sleep for 3 seconds (non-busy)
sleep(3);

$data = getrusage();
echo "User time: ".
	($data['ru_utime.tv_sec'] +
	$data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
	($data['ru_stime.tv_sec'] +
	$data['ru_stime.tv_usec'] / 1000000);

/* 输出
User time: 0.011552
System time: 0
*/

 sleep是不占用系统时间的,我们可以来看下面的一个例子:

// loop 10 million times (busy)
for($i=0;$i<10000000;$i++) {

}

$data = getrusage();
echo "User time: ".
	($data['ru_utime.tv_sec'] +
	$data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
	($data['ru_stime.tv_sec'] +
	$data['ru_stime.tv_usec'] / 1000000);

/* 输出
User time: 1.424592
System time: 0.004204
*/
 

这花了大约14秒的CPU时间,几乎所有的都是用户的时间,因为没有系统调用。

系统时间是CPU花费在系统调用上的上执行内核指令的时间。下面是一个例子:

$start = microtime(true);
// keep calling microtime for about 3 seconds
while(microtime(true) - $start < 3) {

}

$data = getrusage();
echo "User time: ".
	($data['ru_utime.tv_sec'] +
	$data['ru_utime.tv_usec'] / 1000000);
echo "System time: ".
	($data['ru_stime.tv_sec'] +
	$data['ru_stime.tv_usec'] / 1000000);

/* prints
User time: 1.088171
System time: 1.675315
*/
 

我们可以看到上面这个例子更耗CPU。

5. 系统常量

PHP 提供非常有用的系统常量 可以让你得到当前的行号 (__LINE__),文件 (__FILE__),目录 (__DIR__),函数名 (__FUNCTION__),类名(__CLASS__),方法名(__METHOD__) 和名字空间 (__NAMESPACE__),很像C语言。

我们可以以为这些东西主要是用于调试,当也不一定,比如我们可以在include其它文件的时候使用?__FILE__ (当然,你也可以在 PHP 5.3以后使用 __DIR__ ),下面是一个例子。

// this is relative to the loaded script's path
// it may cause problems when running scripts from different directories
require_once('config/database.php');

// this is always relative to this file's path
// no matter where it was included from
require_once(dirname(__FILE__) . '/config/database.php');

 下面是使用 __LINE__ 来输出一些debug的信息,这样有助于你调试程序:

// some code
// ...
my_debug("some debug message", __LINE__);
/* 输出
Line 4: some debug message
*/

// some more code
// ...
my_debug("another debug message", __LINE__);
/* 输出
Line 11: another debug message
*/

function my_debug($msg, $line) {
	echo "Line $line: $msg\n";
}
 

6.生成唯一的ID

有很多人使用 md5() 来生成一个唯一的ID,如下所示:

// generate unique string
echo md5(time() . mt_rand(1,1000000));

 其实,PHP中有一个叫?uniqid() 的函数是专门用来干这个的:

// generate unique string
echo uniqid();
/* 输出
4bd67c947233e
*/

// generate another unique string
echo uniqid();
/* 输出
4bd67c9472340
*/
 

可能你会注意到生成出来的ID前几位是一样的,这是因为生成器依赖于系统的时间,这其实是一个非常不错的功能,因为你是很容易为你的这些ID排序的。这点MD5是做不到的。

你还可以加上前缀避免重名:

// 前缀
echo uniqid('foo_');
/* 输出
foo_4bd67d6cd8b8f
*/

// 有更多的熵
echo uniqid('',true);
/* 输出
4bd67d6cd8b926.12135106
*/

// 都有
echo uniqid('bar_',true);
/* 输出
bar_4bd67da367b650.43684647
*/

 而且,生成出来的ID会比MD5生成的要短,这会让你节省很多空间。

分享到:
评论

相关推荐

    9个必须知道的实用PHP函数和功能

    本文将详细介绍九个在实际开发中非常实用且经常被忽略的PHP函数和功能。 #### 1. 任意参数数目的函数 PHP 提供了一种灵活的方式来定义函数,使得函数可以接收任意数量的参数。这可以通过 `func_get_args()` 函数...

    PHP开发笔记系列(九)- 数组(三)

    在本篇"PHP开发笔记系列(九)- 数组(三)"中,我们将深入探讨PHP数组的高级用法,包括关联数组、多维数组以及数组函数的使用。 一、关联数组 关联数组是PHP数组的一种类型,其中的键和值之间存在关联关系,键可以...

    基于PHP的小说CMS管理系统源码.zip

    学习如何编写和使用API,对于扩展系统功能非常有用。 九、安全防护 任何Web系统都需要考虑安全问题,例如防止SQL注入、XSS攻击等。了解并实践基本的安全防护措施,可以使你的CMS系统更加稳固。 十、性能优化 对于...

    php教程MYSQL学习视频PHP程序员基础课程下16-29课.rar

    "18PHP第十八讲_PHP字符串的操作"和"19PHP第十九讲_PHP中的cookie与session"关注的是PHP的基础语法和用户交互。字符串操作在处理用户输入时必不可少,而Cookie和Session则是跟踪用户状态、实现会话管理的关键技术。 ...

    国外PHP动态第四期

    3. **结合使用Smarty和Zend Framework**:展示如何将这两个工具结合起来,构建一个功能完善的CMS系统,包括用户认证、内容管理等功能。 通过这种方式构建的CMS系统具有高度的灵活性和可扩展性,适用于多种应用场景...

    sql server driver for php 1.1 中文文档

    这个驱动程序提供了全面的功能,包括数据查询、事务处理、游标支持以及更多高级特性,以帮助开发者充分利用SQL Server的功能。 一、SQL Server与PHP的整合 在PHP环境中,SQL Server Driver for PHP 1.1 提供了桥梁...

    PHP开发笔记系列(九)- 数组(一)

    在PHP开发过程中,数组是一种非常重要的数据结构,它允许我们存储多个值在一个变量中,每个值都有一个唯一的键作为标识。本篇笔记将探讨PHP数组的基础知识,包括数组的创建、访问、遍历以及常见的操作。 1. **数组...

    php5中文英文文档

    PHP5是PHP(Hypertext Preprocessor)语言的第五个主要版本,它的出现极大地提升了PHP在Web开发领域的地位。PHP是一种开源的服务器端脚本语言,尤其适合于Web开发,可以嵌入到HTML中使用。PHP5在PHP4的基础上进行了...

    初学PHP--十天学会PHP

    这对于处理上传下载、日志记录等功能非常有用。 【第八天:会话与Cookie】 PHP的session和cookie机制用于跟踪用户状态。session存储在服务器端,安全性较高,而cookie存储在客户端,易受攻击。合理运用两者可以...

    PHP5中文手册

    2. **类继承**:PHP5支持单一继承,一个类可以继承一个父类的属性和方法。 3. **封装**:通过访问修饰符(public, private, protected)控制类的属性和方法的可见性,实现数据的封装。 4. **抽象类与接口**:抽象...

    php设计模式高清版

    1. **标识**:这是一个简短的名字,用来快速地描述模式的功能。例如,“单例模式”或“工厂模式”。 2. **问题描述**:这部分详细说明了该模式所解决的问题是什么。例如,如何确保一个类只有一个实例,并提供一个...

    PHP4 编程与实例

    虽然现在PHP已经发展到更高的版本,但PHP4作为历史上的一个重要里程碑,其基础知识和编程理念对理解PHP5、PHP7等后续版本仍有很大帮助。本教材通过实例讲解,让读者在实践中掌握PHP4的核心概念和技术。 一、PHP4...

    Building Websites with PHP-Nuke

    - **PHP-Nuke能为您做什么**:PHP-Nuke是一个开源的内容管理系统,可以用来搭建具有新闻发布、论坛讨论、文件管理等功能的动态网站。它能够满足个人、组织或企业对于网站的基本需求,比如信息发布、用户管理和社区...

    php的一些基本语法

    ### PHP的一些基本语法知识点 #### 一、PHP简介 ...以上内容涵盖了PHP的一些基本语法,从PHP简介到文件处理等多个方面,对于初学者来说是非常有用的入门资料。掌握这些基础知识对于学习PHP编程至关重要。

    PHP设计模式指南中文版

    在PHP中,当需要在不同平台或环境下创建相关对象集合时,抽象工厂模式尤为有用。 四、建造者模式(Builder) 建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在PHP中,它常用于...

    非常有用的9个PHP代码片段

    在本文中,我们将深入探讨九个非常有用的PHP代码片段,这些片段可以在开发网站、应用程序或博客时极大地节省开发时间。这些代码片段包括创建数据URI、合并JavaScript和CSS文件以及在发送电子邮件时检查邮件是否被...

    九宫格抽奖系统用过都说好.zip

    总的来说,这个九宫格抽奖系统集成了丰富的功能,既能满足日常运营需求,又具有高度的灵活性和可定制性。配合微信小程序和H5,它能无缝对接移动设备,为用户提供便捷的抽奖体验。在实际使用过程中,用户应根据提供的...

    php7.0的一些特性

    - **安全随机数生成器**:PHP 7.0 引入了一个新的安全随机数生成器,这在加密算法和安全相关的应用场景中非常有用。 #### 七、其他重要改进 - **删除旧功能**:为了保持语言的精简和现代化,PHP 7.0 删除了一些过时...

    PHP面试题及答案,另附学习心得

    ### PHP面试题及答案解析 #### 一、打印前一天的时间 **题目**: 使用PHP打印出前一天的时间,格式为...这些问题涵盖了PHP的基本概念、常用函数、数据库优化、模板引擎等多个方面,对准备PHP面试的人来说非常有用。

    九个你必须知道而且又很好用的php函数和特点

    以下九个PHP函数及其特点对于开发者来说是非常重要的: 1. **任意数目的参数**: PHP允许你定义接受任意数量参数的函数,这通过`func_get_args()`函数实现。例如,你可以创建一个没有固定参数列表的函数,`func_...

Global site tag (gtag.js) - Google Analytics