php – 记录所有执行的行
发布时间:2020-12-13 22:39:18 所属栏目:PHP教程 来源:网络整理
导读:有没有一个简单的方法(每一行之后都没有粘贴fwrites)让 PHP将每条执行行写入日志? 虽然我同意@gnif,因为一个调试器是最适合的,我仍然会回答你的问题,因为它是可能的(不完美,但可能). 考虑你有以下代码: sometest.php ?phpdeclare(ticks=1);include_once 'd
|
有没有一个简单的方法(每一行之后都没有粘贴fwrites)让
PHP将每条执行行写入日志?
虽然我同意@gnif,因为一个调试器是最适合的,我仍然会回答你的问题,因为它是可能的(不完美,但可能).
考虑你有以下代码: sometest.php <?php declare(ticks=1); include_once 'debug.php'; $a = 'foo'; $b = 'bar'; $c = $a . $b; $d = $e = "hello"; strlen($d); include 'somefile.php'; somefile.php <?php $hello = 'world'; 所以,sometest.php包含以下文件(debug.php): <?php
register_tick_function(function(){
$backtrace = debug_backtrace();
$line = $backtrace[0]['line'] - 1;
$file = $backtrace[0]['file'];
if ($file == __FILE__) return;
static $fp,$cur,$buf;
if (!isset($fp[$file])) {
$fp[$file] = fopen($file,'r');
$cur[$file] = 0;
}
if (isset($buf[$file][$line])) {
$code = $buf[$file][$line];
} else {
do {
$code = fgets($fp[$file]);
$buf[$file][$cur[$file]] = $code;
} while (++$cur[$file] <= $line);
}
$line++;
echo "$code called in $file on line $linen";
});
它是registers a tick function,也是declares the tick interval.它将跟踪使用回溯调用的文件/行. 现在,如果我们执行sometest.php,我们将得到: include_once 'debug.php'; called in sometest.php on line 5 $a = 'foo'; called in sometest.php on line 7 $b = 'bar'; called in sometest.php on line 8 $c = $a . $b; called in sometest.php on line 9 $d = $e = "hello"; called in sometest.php on line 10 strlen($d); called in sometest.php on line 11 $hello = 'world'; called in somefile.php on line 3 include 'somefile.php'; called in sometest.php on line 13 你可以看到somefile.php包含在最后,尽管它在$hello =’world’之前被调用.这是因为当包含完成该行,而不是启动时,tick函数将被调用. 此外,tick函数在函数/方法声明中被调用: <?php
function foo() {
return 'bar';
}
foo();
会给你一些像: } called in somefunc.php on line 5 # this is the function declaration foo(); called in somefunc.php on line 7 # this is the function call 注意:使用ticks时要小心,因为在5.3.0之前,线程Web服务器不支持它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
