2

I'm using PHP version 5.3.19 and I have the following code :

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();

Now i just tried hacking with the nothing there, it's a function doing nothing because i tried setting them as null but that didn't changed, and this doesn't change it too.

I've also tried wrapping in try catch but it stills handles the error.

I can't disable the errors completly as im using them with a custom error handler, what i want is to disable the foreach loop for errors, i've also called the function with @ but since i used custom error handler it no longer worked.

I've read here that when using custom handler php ignores error_reporting.

How can i get the foreach to not handle errors no matter what?

0

1 Answer 1

0

Neither set_error_handler() nor set_exception_handler() enable us to log fatal errors such E_ERROR, E_PARSE and E_CORE_ERROR.

The solution to the problem is register_shutdown_function()

This function lets you register a callback function that will be run when PHP is shutting down, even when it is forced to shut down due to entering an unstable state.

Here is a Custom Class which enables you to Register or Unregister a ShutDown Function.

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;
    }
}

You can use this Class logic along with your code.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.