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!