PHP:写自定义日志的致命错误

时间:2018-03-30 16:12:05

标签: php

我有一个PHP脚本偶尔会抛出Fatal error: Uncaught OAuthException:,具体取决于错误类型。这导致我的PHP脚本停止处理。

我需要在自定义日志文件中捕获该错误并将其写入磁盘。我知道如果我在php.ini中启用错误日志记录,我就能看到它,但我需要能够自己捕获它并将其写入自定义错误日志文件。

这是我收到的错误消息

Fatal error: Uncaught OAuthException: Access to this data is temporarily disabled
  thrown in /var/script.php on line 1092

这是它在script.php中引用的一段代码:

  protected function throwAPIException($result) {
    $e = new FacebookApiException($result);
    switch ($e->getType()) {
      // OAuth 2.0 Draft 00 style
      case 'OAuthException':
        // OAuth 2.0 Draft 10 style
      case 'invalid_token':
        // REST server errors are just Exceptions
      case 'Exception':
        $message = $e->getMessage();
        if ((strpos($message, 'Error validating access token') !== false) ||
            (strpos($message, 'Invalid OAuth access token') !== false) ||
            (strpos($message, 'An active access token must be used') !== false)
        ) {
          $this->destroySession();
        }
        break;
    }
    throw $e;
  }

第1092行是$e = new FacebookApiException($result);

有什么方法可以捕获该异常吗?我已尝试在case 'OAuthException':下添加以下内容,但它无法正常工作:

$message = $e->getMessage();
    if (strpos($message, 'Access to this data is temporarily disabled') !== false)
        {
        $this->destroySession();
        file_put_contents($filename, $message);
        }
    break;
    throw $e;

我可以做些什么来解决这个问题?感谢。

1 个答案:

答案 0 :(得分:0)

我看到2个有用的更改。

  1. 正如@barmar的评论建议你可以使用 throw,try,catch 。这是“现代”,可能是解决这个问题的最好方法。然而,这并不总是可行的,你无法解释所有事情。

  2. 设置自定义错误处理程序set_error_handler('errorHandler');使用此指令时,如果遇到错误,它将进入您指定的函数。您需要小心,因为errorHandler中的错误会对代码造成破坏性影响。在该功能中,您可以打开日志文件并指定其名称,位置和内容。您甚至可以根据错误类型,位置和消息来条件化多个日志文件。使用'function errorHandler($ severity,$ message,$ file,$ line){}'定义处理程序'参见php.net set_error_handler