PHP set_error_handler()始终返回null

时间:2015-08-11 03:50:08

标签: php error-handling

我无法弄清楚出了什么问题。

以下内容始终导致输出“无法设置错误处理程序”:

results = {}

for f in list2:
    common = f.split('_')[0]
    results[common] = []

for f in list1:
    common = f.split('_')[0]
    try:
        results[common].append(f)
    except KeyError:
        print('{} not a valid grouper'.format(common))

# To convert into a list of tuples
as_list = [(k,)+tuple(v) for k,v in results.iteritems()]
print(as_list)

2 个答案:

答案 0 :(得分:3)

因为执行此函数需要有错误,如果在执行脚本之前发生错误,则无法调用自定义错误处理程序,因为它当时未注册。

function die_on_error($errno, $errstr, $errfile, $errline, $errcontext){
    echo"This is sparta";
    echo "\n\n\$errno: $errno";
    echo "\n\n\$errstr: $errstr";
    echo "\n\n\$errfile: $errfile";
    echo "\n\n\$errline: $errline";
    echo "\n\n\$errcontext: ";
    var_dump($errcontext);
    die();
}

 print_r(set_error_handler('die_on_error'));

trigger_error("Incorrect  array", E_USER_WARNING);

demo

答案 1 :(得分:0)

我有一个复杂的单例类来处理错误,但我也想知道一切都运行正常。

我的解决方案是使错误报告无效并使用特定字符串触发错误以进行检查,然后将类中的变量设置为true并检查该错误。

类似

class myerror
{
    private $enabled;

    public function __construct()
    {
       if ($this->set_handler() === false) die('Error Handler Failed To Init...');
    }

    private function set_handler()
    {
        $methodVariable = array('myerror', 'error_handler');
        if (is_callable($methodVariable, true, $callable_name) === false return false;
        @set_error_handler($callable_name, E_ALL);
        trigger_error('Error Init', E_USER_NOTICE);
        return $this->enabled;
    }

    public static function error_handler($errNo, $errStr, $errFile, $errLine)
    {
        if($errStr == 'Error Init')
        {
            $this->enabled = true;
            return;
        }
        // do something with the error
    }
}

这只是一个未经测试的例子,但我希望它能让你知道我是如何解决这个问题的。 :)