WordPress.org

Make WordPress Core

Changeset 44962


Ignore:
Timestamp:
03/21/2019 04:02:05 PM (15 months ago)
Author:
flixos90
Message:

Bootstrap/Load: Introduce fatal error handler.

This changeset introduces a WP_Fatal_Error_Handler class that detects fatal errors and displays a more user-friendly message about the site experiencing technical difficulties.

Websites that have custom requirements in that regard can implement their own fatal error handler by adding a fatal-error-handler.php drop-in that returns the handler instance to use, which must be based on a class that inherits WP_Fatal_Error_Handler. That handler will then be used in place of the default one. Alternatively, the fatal error handler feature can be completely disable through a constant WP_DISABLE_FATAL_ERROR_HANDLER.

Websites that would like to modify specifically the error template displayed in the frontend can add a php-error.php drop-in that works similarly to the existing db-error.php drop-in. For more granular customization, the fatal error handler also includes new filters wp_should_handle_php_error, wp_php_error_message and wp_php_error_args.

Props afragen, bradleyt, flixos90, ocean90, schlessera, SergeyBiryukov, spacedmonkey, timothyblynjacobs.
See #46130, #44458.

Location:
trunk/src
Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-settings.php

    r44808 r44962  
    1818// Include files required for initialization.
    1919require( ABSPATH . WPINC . '/load.php' );
     20require( ABSPATH . WPINC . '/class-wp-fatal-error-handler.php' );
     21require( ABSPATH . WPINC . '/error-protection.php' );
    2022require( ABSPATH . WPINC . '/default-constants.php' );
    2123require_once( ABSPATH . WPINC . '/plugin.php' );
     24
     25// Make sure we register the shutdown handler for fatal errors as soon as possible.
     26wp_register_fatal_error_handler();
    2227
    2328/*
     
    529534 */
    530535do_action( 'wp_loaded' );
     536
     537/*
     538 * Store the fact that we could successfully execute the entire WordPress
     539 * lifecycle. This is used to skip the premature shutdown handler, as it cannot
     540 * be unregistered.
     541 */
     542if ( ! defined( 'WP_EXECUTION_SUCCEEDED' ) ) {
     543    define( 'WP_EXECUTION_SUCCEEDED', true );
     544}
Note: See TracChangeset for help on using the changeset viewer.