使用set_error_handler时,我可以获得更有意义的文件和行信息吗?

时间:2014-07-19 07:36:35

标签: php

我一直在编写一个小型PHP框架,其中我一直在使用set_error_handler以更有用的方式显示错误,这是任何框架的一个非常典型的特性。

我刚刚完成了一项功能,通过使用传递给错误处理程序的文件和行号,我将该行以及它上面和下面的行加载到视图中以准确显示问题所在:

enter image description here

这很好用,但是现在它实现了我已经注意到这完全没有用了,因为标记的行是通过trigger_error触发错误的行而不是实际的代码< em>导致错误。

有没有办法引用导致错误的行?如果我可以找出失败的函数调用的地方,那将是最理想的。例如,我想在这种情况下被引用line 7,而不是像我现在那样line 4

1.  function test($value)
2.  {
3.      if($value < 5)
4.          trigger_error("I expected more.");
5.  }
6.  
7.  test(3);

我很乐意修改我的框架中使用trigger_error的方法,如果这有帮助的话(例如,如果有办法知道函数从其自身内部调用的地方(非常肯定没有),沿着这些路线。)

如果需要,我很乐意使用set_error_handlertrigger_error的替代方法。

2 个答案:

答案 0 :(得分:2)

在这种情况下,您可以使用debug_backtrace,但您需要根据需要调整要跟踪的错误行。例如,在这种情况下:

<?php

set_error_handler('myErrorHandler');

function test($value)
{
     if($value < 5)
          trigger_error("I expected more.");
}

test(3);     

function myErrorHandler($errno, $errstr, $errfile, $errline)
{

    $db = debug_backtrace();
    for ($i=0, $c = count($db); $i<$c; ++$i) {
        if ($db[$i]['function'] == 'trigger_error') {
            echo $db[$i+1]['line'];
            break;
        }
    }
}

会给你11

答案 1 :(得分:0)

也许你可以查看debug_backtrace()