PHP自定义错误处理程序在第0行报告0

时间:2015-08-24 21:52:37

标签: php

我有一个自定义错误处理程序,它应该将错误记录到数据库中,但由于某种原因,此错误始终显示在数据库中。每次页面加载" 0在第0行和#34;,其中第一个0是错误级别,在任何文件中,因为它没有提供,在第0行。这很奇怪,因为我和直到现在才见过这个。错误处理程序如下;

public function fatalErrHandlr(){
    $errstrArr = error_get_last();
    $errno = mysqli_real_escape_string($this->dbc, trim($errstrArr['type']));
    $errstr = mysqli_real_escape_string($this->dbc, trim($errstrArr['message']));
    $errfile = mysqli_real_escape_string($this->dbc, trim($errstrArr['file']));
    $errline = mysqli_real_escape_string($this->dbc, trim($errstrArr['line']));
    $query = "INSERT INTO `err` (`errno`, `errstr`, `errfile`, `errline`) VALUES ('$errno', '$errstr', '$errfile', '$errline')";
    mysqli_query($this->dbc, $query);
    //var_dump(mysqli_error($this->dbc));
    echo("<b>There was an error. Check the database.</b>");
    //return true;
}

错误处理程序配置为:

register_shutdown_function(array($core, 'fatalErrHandlr'));

1 个答案:

答案 0 :(得分:1)

register_shutdown_function没有配置错误处理程序,它设置了一个在脚本完成时运行的函数。因此,无论是否出现错误,您都会在每次运行脚本时收到日志消息。校正函数为set_error_handler。它将详细信息作为参数传递给回调,因此您不需要使用error_get_last

public function fatalErrHandlr($errno, $errstr, $errfile, $errline){
    $query = $this->dbc->prepare("INSERT INTO `err` (`errno`, `errstr`, `errfile`, `errline`) VALUES (?, ?, ?, ?)");
    $query->bind_param('ssss', $errno, $errstr, $errfile, $errline)
    $query->execute();
    //var_dump(mysqli_error($this->dbc));
    echo("<b>There was an error. Check the database.</b>");
    //return true;
}
相关问题