php - ErrorException 返回错误的文件和行

标签 php exception

在 file1.php 中:

set_error_handler('my_error_handler');
set_exception_handler('my_exception_handler');

function my_error_handler($errNo, $errStr, $errFile, $errLine, $whatever = null){
  // here ErrFile and $errLine are correct only for native funcs...
  throw New ErrorException($errStr, 0, $errNo, $errFile, $errLine);
}

function my_exception_handler($exception){
  print $exception->getLine(); // correct only for native functions
  print $exception->getFile(); // correct only for native functions
}

在 file2.php 中,一个示例函数定义:

function foo($requiredArg){

}

在 file3.php 中,调用 foo:

  foo();

产生:

Missing argument 1 for foo(), called in file3.php on line 2 and defined...

消息是正确的,但是当我尝试获取文件并使用 $exception->getFile()$exception->getLine() 时(在我的异常处理程序),我得到了定义 foo() 的文件和行,而不是它被调用的地方...

但是使用 native PHP 函数,我可以获得调用该函数的文件和行(这就是我想要的)。

最佳答案

它简单地归结为最接近的第一个。

当您使用核心或内置函数时,它们的定义包含在 PHP 的核心中。这意味着与用户定义的函数相比,函数的定义不可用,用户定义的函数的定义很容易获得。

如果您在引用您的用户的 exception_handler 函数中运行 debug_backtrace();$exception->getTrace(); - defined functions 的错误,你会先看到函数的定义,然后再看到函数的调用。如果您调用内部函数,您将只能看到调用行,因为 PHP 无法告诉您脚本或包含的文件中定义了内部函数的代码行,因为它是在核心中定义的。

这是错误处理的操作顺序。如果您想获得调用该函数的实际行,您可以查看跟踪并获取第二个数组对行号的引用。

关于php - ErrorException 返回错误的文件和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583758/

相关文章:

javascript - 单击按钮时使用数组元素更改标签内容

javascript - Chrome 中的非法访问 Javascript 错误

java - 为什么用浮点(或 double )数字除以零不会抛出 java.lang.ArithmeticException :/by zero in Java

php - HTML/惠普 : Emogrifier turns {} into %7B and %7D

php - 使用 MySQL 数据库中的多个选项预填充下拉菜单

PHP上传问题

php - 显示用于复制/粘贴的任何网站源代码

c++ - 在异常消息中使用 constexpr

c# - UnauthorizedAccessException 试图删除文件夹中的文件,我可以在其中删除具有相同代码的其他文件

c++ - 捕获异常后确定异常类型?