【问题标题】:set_error_handler & set_exception_handler设置错误处理程序和设置异常处理程序
【发布时间】:2011-01-15 17:27:42
【问题描述】:

我使用以下函数来设置错误控制:

set_error_handler
set_exception_handler

当发生错误时,它会调用该函数来捕获错误并将其存储到数据库中,然后将用户重定向到通用页面

function log_error($exception)
 {
  if(is_object($exception))
   log_action(ERROR, "Exception with message " . $exception->getMessage() . " thrown in " . $exception->getFile() . " on line " . $exception->getLine(), base_url() . $_SERVER["REQUEST_URI"]);
  else
   log_action(ERROR, "Unable to catch exception. print out: " . print_r($exception, true), base_url() . $_SERVER["REQUEST_URI"]);

  header("Location: " . base_url() . "public_error_notification");
 }

这通常有效,除了很多次而不是得到一个错误对象,我只是得到一个数字。我一直得到的两个数字是 8 和 2。你可以在我的错误日志中看到这些数字。我的问题是,这些数字是什么意思?当我查找它时,这是有道理的,因为文件有错误代码,但我现在得到的错误与文件无关。我假设它们是错误代码,那么有什么方法可以获得可以返回的错误代码列表?

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    您似乎对异常处理程序和错误处理程序使用了相同的回调,它们不传递相同类型的参数。

    看一下set_error_handler doc,第一个参数是错误代码,第二个是错误字符串。没有对象通过

    http://php.net/set_error_handler

    对于错误代码,请检查:

    http://php.net/manual/en/errorfunc.constants.php

    【讨论】:

      【解决方案2】:

      error_handler 回调采用具有此签名的函数:

      handler ( int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] )
      

      第一个参数是错误号,第二个是描述错误的字符串。

      同时,exception_handler 有一个带有这个签名的函数:

      handler ( object $exception )
      

      第一个也是唯一的参数是一个包含抛出异常细节的对象。

      您遇到的问题是异常和错误没有相同的回调签名。当您在适当地处理异常时,您正在使用不适当的回调来处理错误。

      当您看到像 82 这样的数字时,您正在捕获错误,当您看到异常对象时,您正在捕获异常。

      【讨论】:

        【解决方案3】:

        我只是补充一下,你得到的数字是引发错误的级别,在 php 中有为它们定义的内容,例如 E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE。

        【讨论】:

          猜你喜欢
          • 2010-11-16
          • 1970-01-01
          • 2015-07-13
          • 1970-01-01
          • 1970-01-01
          • 2013-11-03
          • 1970-01-01
          • 2011-11-02
          • 1970-01-01
          相关资源
          最近更新 更多