2

我正在使用 PHP 5.3.19 版本,并且我有以下代码:

set_exception_handler(array($this->main_model,'nothing'));
set_error_handler(array($this->main_model,'nothing'));
error_reporting(0);
foreach ($data as $row){
...
}
restore_error_handler();

现在我只是尝试使用nothing那里进行黑客攻击,这是一个什么都不做的函数,因为我尝试将它们设置为 null 但没有改变,这也没有改变它。

我也尝试过包装,try catch但它仍然可以处理错误。

我无法完全禁用错误,因为我将它们与自定义错误处理程序一起使用,我想要的是禁用foreach错误循环,我也调用了该函数,@但由于我使用了自定义错误处理程序,它不再起作用。

我在这里读到,当使用自定义处理程序 php 时会忽略error_reporting.

无论如何,我怎样才能让 foreach处理错误?

4

1 回答 1

0

既不set_error_handler()也不set_exception_handler()使我们能够记录致命错误,例如 E_ERROR、E_PARSE 和 E_CORE_ERROR。

solution问题是register_shutdown_function( )

此函数允许您注册一个回调函数,该函数将在 PHP 关闭时运行,即使由于进入不稳定状态而被迫关闭也是如此。

这是一个自定义类,可让您注册或取消注册 ShutDown 功能。

class UnregisterableCallback{

    // Store the Callback for Later
    private $callback;

    // Check if the argument is callable, if so store it
    public function __construct($callback)
    {
        if(is_callable($callback))
        {
            $this->callback = $callback;
        }
        else
        {
            throw new InvalidArgumentException("Not a Callback");
        }
    }

    // Check if the argument has been unregistered, if not call it
    public function call()
    {
        if($this->callback == false)
            return false;

        $callback = $this->callback;
        $callback(); // weird PHP bug
    }

    // Unregister the callback
    public function unregister()
    {
        $this->callback = false;
    }
}

您可以将此 Class 逻辑与您的代码一起使用。

于 2013-01-15T17:19:14.140 回答