Home  >  Article  >  Backend Development  >  How to Safely Handle Fatal Errors in PHP?

How to Safely Handle Fatal Errors in PHP?

Susan Sarandon
Susan SarandonOriginal
2024-10-24 11:49:29176browse

How to Safely Handle Fatal Errors in PHP?

Safely Handling Fatal Errors in PHP

PHP's error handling capabilities include catching fatal errors like "Allowed memory size exhausted." This error occurs when a script consumes excessive memory. Rather than increasing the memory limit, you can return a custom message to the user.

One effective method is to utilize register_shutdown_function(). This function registers a callback that checks error_get_last(). By checking the error after the script finishes running, you can determine if a fatal error occurred and handle it gracefully.

Here's an example implementation:

<code class="php">ini_set('display_errors', false);
error_reporting(-1);

set_error_handler(function($code, $string, $file, $line){
        throw new ErrorException($string, null, $code, $file, $line);
    });

register_shutdown_function(function(){
        $error = error_get_last();
        if(null !== $error)
        {
            echo 'Caught at shutdown';
        }
    });

try
{
    while(true)
    {
        $data .= str_repeat('#', PHP_INT_MAX);
    }
}
catch(\Exception $exception)
{
    echo 'Caught in try/catch';
}</code>

When executed, this script prints "Caught at shutdown," indicating that the fatal error was caught in the shutdown function.

You can examine the $error array in the shutdown function to determine the cause of the error and take appropriate action, such as reissuing the request with different parameters or returning a response.

It's important to note that while keeping error_reporting() at a high level (-1) is recommended, you should still use set_error_handler() and ErrorException for all other error handling needs to prevent issues during script execution.

The above is the detailed content of How to Safely Handle Fatal Errors in PHP?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn