加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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服务器不支持它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读