PHP自定义错误处理程序无法正常工作

时间:2015-02-16 10:25:46

标签: php class custom-error-handling

我在StackOverFlow上找到了一段代码,用于错误处理程序。 我面临的问题与主题启动者所询问的问题完全一样。

错误根本无法报告。 有点沮丧,因为我真的需要一个体面的错误处理程序。 我从Joseph Lenton那里找到了一个漂亮的,但它绝对打破了我想做的一切所以我需要创造一个适合我的。

问题:

它没有报告任何错误? :S

    <?php
class class_error
{
    public function __construct()
    {
        // set to the user defined error handler
        set_error_handler([$this, 'errorHandler']);
    }

    public function errorHandler($errno, $errstr, $errfile, $errline)
    {
        //don't display error if no error number
        if (!(error_reporting() & $errno)) {
            return;
        }

    //display errors according to the error number
    switch ($errno)
    {
        case E_USER_ERROR:
            echo "<b>ERROR</b> [$errno] $errstr<br />\n";
            echo "  Fatal error on line $errline in file $errfile";
            echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
            echo "Aborting...<br />\n";
            exit(1);
            break;

        case E_USER_WARNING:
            echo "<b>WARNING</b> [$errno] $errstr<br />\n";
            break;

        case E_USER_NOTICE:
            echo "<b>NOTICE</b> [$errno] $errstr<br />\n";
            break;

        default:
            echo "<b>UNKNOWN ERROR</b> [$errno] $errstr<br />\n";
            break;
    }

        //don't execute PHP internal error handler
        return true;
    }
}
?>

我打电话给剧本:

<?php 
include('function.errorhandler.class.php');
$error = new class_error();

echo 'dssd;
?>

我仍然不断获得相同的旧PHP生成错误。 :○

所以,让我们回到基础,因为即使最简单的事情也无法再发挥作用。

<?php
include('function.errorhandler.class.php');

///######## DEFAULT ERROR HANDLER
set_error_handler('ErrorHandler');
///######## SHUTDOWN HANDLER
register_shutdown_function('FatalErrorHandler');
///######## A FILE BECAUSE PHP DOES NOT WANT TO ACCEPT ANY ERROR HANDLER IN THE SAME FILE
include('hi.php');
?>

并在errorhandler.class文件中定义:

function ErrorHandler(){
    exit(print_r(func_get_args()));
}
function FatalErrorHandler(){
    exit(print_r(func_get_args()));
}

我仍然得到相同的旧生锈PHP错误通知:

(!)解析错误:语法错误,意外'sdds;第3行的N:\ wamp \ www \ project \ errorhandler \ hoi.php中的'(T_ENCAPSED_AND_WHITESPACE) 调用堆栈

时间记忆功能位置

1 0.0003 240376 {main}().. \ errorHandler.php:0 Array()1

1 个答案:

答案 0 :(得分:0)

用于测试错误处理程序的脚本包含语法错误。因此,脚本不会执行,并且永远不会使用您的错误处理程序。

因此包含错误处理程序的php文件在语法上应该是正确的。启用错误处理程序后,任何其他包含文件都将使用您的错误处理程序。