WordPress.org

Make WordPress Core


Ignore:
Timestamp:
01/21/2019 08:14:56 PM (3 years ago)
Author:
flixos90
Message:

Bootstrap/Load: Change shutdown handler naming to final fatal error handler and allow disabling the handler entirely via a constant.

The WP_Shutdown_Handler name plus related function names were premature when originally committed, as there can be multiple shutdown handlers in PHP, and WordPress makes use of that feature. This changeset modifies the name to a more appropriate WP_Fatal_Error_Handler, and related to that changes the following names:

  • The drop-in to override the handler is now called fatal-error-handler.php.
  • The internal function wp_register_premature_shutdown_handler is now called wp_register_fatal_error_handler().

In addition to these naming changes, a new constant WP_DISABLE_FATAL_ERROR_HANDLER is introduced that can be set in wp-config.php to entirely disable the fatal error handler. That constant's value is and should be accessed indirectly via a new wp_is_fatal_error_handler_enabled() function and is filterable via a new wp_fatal_error_handler_enabled hook. Note that disabling the fatal error handler will skip the new functionality entirely, including the potentially used fatal-error-handler.php drop-in.

The new set of constant, filter and function provide for an easier-to-use mechanism to disable the fatal error handler altogether, rather than requiring developers to implement a drop-in for purely that purpose.

Props afragen, flixos90, joyously, knutsp, markjaquith, ocean90, schlessera, spacedmonkey.
Fixes #46047. See #44458.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/error-protection.php

    r44524 r44674  
    149149
    150150/**
    151  * Registers the WordPress premature shutdown handler.
     151 * Registers the shutdown handler for fatal errors.
     152 *
     153 * The handler will only be registered if {@see wp_is_fatal_error_handler_enabled()} returns true.
    152154 *
    153155 * @since 5.1.0
    154156 */
    155 function wp_register_premature_shutdown_handler() {
     157function wp_register_fatal_error_handler() {
     158    if ( ! wp_is_fatal_error_handler_enabled() ) {
     159        return;
     160    }
     161
    156162    $handler = null;
    157     if ( defined( 'WP_CONTENT_DIR' ) && is_readable( WP_CONTENT_DIR . '/shutdown-handler.php' ) ) {
    158         $handler = include WP_CONTENT_DIR . '/shutdown-handler.php';
     163    if ( defined( 'WP_CONTENT_DIR' ) && is_readable( WP_CONTENT_DIR . '/fatal-error-handler.php' ) ) {
     164        $handler = include WP_CONTENT_DIR . '/fatal-error-handler.php';
    159165    }
    160166
    161167    if ( ! is_object( $handler ) || ! is_callable( array( $handler, 'handle' ) ) ) {
    162         $handler = new WP_Shutdown_Handler();
     168        $handler = new WP_Fatal_Error_Handler();
    163169    }
    164170
    165171    register_shutdown_function( array( $handler, 'handle' ) );
    166172}
     173
     174/**
     175 * Checks whether the fatal error handler is enabled.
     176 *
     177 * A constant `WP_DISABLE_FATAL_ERROR_HANDLER` can be set in `wp-config.php` to disable it, or alternatively the
     178 * {@see 'wp_fatal_error_handler_enabled'} filter can be used to modify the return value.
     179 *
     180 * @since 5.1.0
     181 *
     182 * @return bool True if the fatal error handler is enabled, false otherwise.
     183 */
     184function wp_is_fatal_error_handler_enabled() {
     185    $enabled = ! defined( 'WP_DISABLE_FATAL_ERROR_HANDLER' ) || ! WP_DISABLE_FATAL_ERROR_HANDLER;
     186
     187    /**
     188     * Filters whether the fatal error handler is enabled.
     189     *
     190     * @since 5.1.0
     191     *
     192     * @param bool $enabled True if the fatal error handler is enabled, false otherwise.
     193     */
     194    return apply_filters( 'wp_fatal_error_handler_enabled', $enabled );
     195}
Note: See TracChangeset for help on using the changeset viewer.