mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-08-16 23:00:21 +00:00
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. git-svn-id: https://develop.svn.wordpress.org/trunk@44962 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
/**
|
||||
* Error Protection API: Functions
|
||||
*
|
||||
* @package WordPress
|
||||
* @since 5.2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* Registers the shutdown handler for fatal errors.
|
||||
*
|
||||
* The handler will only be registered if {@see wp_is_fatal_error_handler_enabled()} returns true.
|
||||
*
|
||||
* @since 5.2.0
|
||||
*/
|
||||
function wp_register_fatal_error_handler() {
|
||||
if ( ! wp_is_fatal_error_handler_enabled() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$handler = null;
|
||||
if ( defined( 'WP_CONTENT_DIR' ) && is_readable( WP_CONTENT_DIR . '/fatal-error-handler.php' ) ) {
|
||||
$handler = include WP_CONTENT_DIR . '/fatal-error-handler.php';
|
||||
}
|
||||
|
||||
if ( ! is_object( $handler ) || ! is_callable( array( $handler, 'handle' ) ) ) {
|
||||
$handler = new WP_Fatal_Error_Handler();
|
||||
}
|
||||
|
||||
register_shutdown_function( array( $handler, 'handle' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the fatal error handler is enabled.
|
||||
*
|
||||
* A constant `WP_DISABLE_FATAL_ERROR_HANDLER` can be set in `wp-config.php` to disable it, or alternatively the
|
||||
* {@see 'wp_fatal_error_handler_enabled'} filter can be used to modify the return value.
|
||||
*
|
||||
* @since 5.2.0
|
||||
*
|
||||
* @return bool True if the fatal error handler is enabled, false otherwise.
|
||||
*/
|
||||
function wp_is_fatal_error_handler_enabled() {
|
||||
$enabled = ! defined( 'WP_DISABLE_FATAL_ERROR_HANDLER' ) || ! WP_DISABLE_FATAL_ERROR_HANDLER;
|
||||
|
||||
/**
|
||||
* Filters whether the fatal error handler is enabled.
|
||||
*
|
||||
* @since 5.2.0
|
||||
*
|
||||
* @param bool $enabled True if the fatal error handler is enabled, false otherwise.
|
||||
*/
|
||||
return apply_filters( 'wp_fatal_error_handler_enabled', $enabled );
|
||||
}
|
||||
Reference in New Issue
Block a user