全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点

yipeiwu_com6年前PHP代码库
复制代码 代码如下:

// 定义全局变量 记录时间
$_timer_id = 0;
// 函数设置全局变量 记录各个断点的运行所需时间
function makeTimer( $notes, $onOff=FALSE )
{
if( $onOff )
{
global $_timer_id;
$GLOBALS['timer'][$_timer_id][0] = microtime(TRUE);
$GLOBALS['timer'][$_timer_id][1] = $notes;
$_timer_id++;
}
}
// 把全局运行时间情况输出
function traceTimer()
{
$timer_str = '';
$G_timer = count($GLOBALS['timer'])-1;
if( $G_timer>0 )
{
for( $i=0;$i<$G_timer;$i++ )
{
$dif_time = number_format( ($GLOBALS['timer'][$i+1][0] - $GLOBALS['timer'][$i][0]), 3 );
$timer_str .= 'dif: '.$dif_time.' '.$GLOBALS['timer'][$i][1]."\n";
}
$dif_time = number_format( (microtime(TRUE) - $GLOBALS['timer'][$G_timer][0]), 3 );
$timer_str .= 'dif: '.$dif_time.' '.$GLOBALS['timer'][$G_timer][1]."\n";
}
return $timer_str;
}
使用方法:
// 开始时间
makeTimer( ' LINE:'.__LINE__ );
$imgstrpos = strpos($str, '<img'.$imgstr);
makeTimer( ' LINE:'.__LINE__ );
$str_p = substr($str_noimg, 0, $imgstrpos);
makeTimer( ' LINE:'.__LINE__ );
$str_n = substr($str_noimg, $imgstrpos, strlen($str_noimg));
makeTimer( ' LINE:'.__LINE__ );
$pst_exc_imgs = $str_p.'<img '.$imgstr.'>'.$str_n." ";
makeTimer( ' LINE:'.__LINE__ );
// 记录到日志中
error_log( traceTimer(), 3, '/tmp/'.basename(__FILE__).'.log' );
// 或者直接输出
echo traceTimer();

at 2010-05-14 09:20

相关文章

深入解析PHP的Yii框架中的event事件机制

事件 事件可以将自定义代码“注入”到现有代码中的特定执行点。附加自定义代码到某个事件,当这个事件被触发时,这些代码就会自动执行。例如,邮件程序对象成功发出消息时可触发 messageSe...

PHP和XSS跨站攻击的防范

其实这个话题很早就想说说了,发现国内不少PHP站点都有XSS漏洞。今天偶然看到PHP5的一个XSS漏洞,在此小结一下。顺便提醒,使用PHP5的朋友最好打下补丁,或者升级一下。 如果你不懂...

探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解

Smarty中如何获取数组的长度 前提假设:分配了一个数组array给Smarty,假设Smarty的分界符为'{' 和'}'。在很多资料上都看到,在Smarty中要求数组的长度时,可以...

PHP使用array_fill定义多维数组的方法

本文实例讲述了PHP使用array_fill定义多维数组的方法。分享给大家供大家参考。具体分析如下: PHP中可以用多个array_fill嵌套完成多维数组的定义: $creatio...

浅谈php字符串反转 面试中经常遇到

1.单字节字符串反转 php提供了用于字符串反转的函数strrev() $str = 'abcdef'; echo strrev($str); 2.对于包含中文的多字节字符串需要用...