确定执行函数的行

时间:2010-02-02 18:25:28

标签: php

我正在尝试构建一个错误类和我过去使用的很多错误类,使用文件 LINE 来显示错误发生的位置,但是他们在功能中使用它们,所以它们总是一样的,这是非常无用的信息。除了发送包含 FILE LINE 的数组与每个函数(这会非常痛苦)之外,我无法想到或发现任何其他内容。有没有好方法或功能来确定正在执行该功能的正确行号和文件?

示例:

<?php
// file1.php
dosomething(false);
?>

<?php
// file2.php
function dosomething($input) {
    if ($input === false) die("Error at Line (line) in File (file)");
}
?>

该函数将因“文件 /file1.php 中的第3行错误”消息而死亡。

3 个答案:

答案 0 :(得分:4)

我想解决方案可能是使用debug_backtrace

给定的示例得到这样的回溯:

array(2) {
[0]=>
array(4) {
    ["file"] => string(10) "/tmp/a.php"
    ["line"] => int(10)
    ["function"] => string(6) "a_test"
    ["args"]=>
    array(1) {
      [0] => &string(6) "friend"
    }
}
[1]=>
array(4) {
    ["file"] => string(10) "/tmp/b.php"
    ["line"] => int(2)
    ["args"] =>
    array(1) {
      [0] => string(10) "/tmp/a.php"
    }
    ["function"] => string(12) "include_once"
  }
}

所以,应该包括你想要的东西; - )


如果您只想输出跟踪(不太可能),还有debug_print_backtrace

答案 1 :(得分:0)

检查set_error_handler函数: http://us3.php.net/manual/en/function.set-error-handler.php 您可能还想查看set_exception_handler函数。

答案 2 :(得分:0)

我在我的网站上使用的功能:

<!DOCTYPE HTML>
<html>
<head>
<title>Determine what line a function was executed from</title>
</head>
<body>
<?php
    function linea($string1, $linea, $string2 = NULL)
    {
      $string2 = !empty($string2) ? $string2 : '';
      return $string1 . $linea . $string2;
    }
    echo linea('Error: ', __LINE__) . '<br />';
    /*
    ...
    lot of code
    ...
    */
    echo linea('Alert -> ', __LINE__, '!') . '<br />';
?>
</body>
</html>

输出:

Error: 13
Alert -> 19!