diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:56:49 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:56:49 +0000 |
commit | a415c29efee45520ae252d2aa28f1083a521cd7b (patch) | |
tree | f4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/error-protection.php | |
parent | Initial commit. (diff) | |
download | wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.tar.xz wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.zip |
Adding upstream version 6.4.3+dfsg1.upstream/6.4.3+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'wp-includes/error-protection.php')
-rw-r--r-- | wp-includes/error-protection.php | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/wp-includes/error-protection.php b/wp-includes/error-protection.php new file mode 100644 index 0000000..08c4159 --- /dev/null +++ b/wp-includes/error-protection.php @@ -0,0 +1,157 @@ +<?php +/** + * Error Protection API: Functions + * + * @package WordPress + * @since 5.2.0 + */ + +/** + * Get the instance for storing paused plugins. + * + * @return WP_Paused_Extensions_Storage + */ +function wp_paused_plugins() { + static $storage = null; + + if ( null === $storage ) { + $storage = new WP_Paused_Extensions_Storage( 'plugin' ); + } + + return $storage; +} + +/** + * Get the instance for storing paused extensions. + * + * @return WP_Paused_Extensions_Storage + */ +function wp_paused_themes() { + static $storage = null; + + if ( null === $storage ) { + $storage = new WP_Paused_Extensions_Storage( 'theme' ); + } + + return $storage; +} + +/** + * Get a human readable description of an extension's error. + * + * @since 5.2.0 + * + * @param array $error Error details from `error_get_last()`. + * @return string Formatted error description. + */ +function wp_get_extension_error_description( $error ) { + $constants = get_defined_constants( true ); + $constants = isset( $constants['Core'] ) ? $constants['Core'] : $constants['internal']; + $core_errors = array(); + + foreach ( $constants as $constant => $value ) { + if ( str_starts_with( $constant, 'E_' ) ) { + $core_errors[ $value ] = $constant; + } + } + + if ( isset( $core_errors[ $error['type'] ] ) ) { + $error['type'] = $core_errors[ $error['type'] ]; + } + + /* translators: 1: Error type, 2: Error line number, 3: Error file name, 4: Error message. */ + $error_message = __( 'An error of type %1$s was caused in line %2$s of the file %3$s. Error message: %4$s' ); + + return sprintf( + $error_message, + "<code>{$error['type']}</code>", + "<code>{$error['line']}</code>", + "<code>{$error['file']}</code>", + "<code>{$error['message']}</code>" + ); +} + +/** + * 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. + * + * **Important:** This filter runs before it can be used by plugins. It cannot + * be used by plugins, mu-plugins, or themes. To use this filter you must define + * a `$wp_filter` global before WordPress loads, usually in `wp-config.php`. + * + * Example: + * + * $GLOBALS['wp_filter'] = array( + * 'wp_fatal_error_handler_enabled' => array( + * 10 => array( + * array( + * 'accepted_args' => 0, + * 'function' => function() { + * return false; + * }, + * ), + * ), + * ), + * ); + * + * Alternatively you can use the `WP_DISABLE_FATAL_ERROR_HANDLER` constant. + * + * @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 ); +} + +/** + * Access the WordPress Recovery Mode instance. + * + * @since 5.2.0 + * + * @return WP_Recovery_Mode + */ +function wp_recovery_mode() { + static $wp_recovery_mode; + + if ( ! $wp_recovery_mode ) { + $wp_recovery_mode = new WP_Recovery_Mode(); + } + + return $wp_recovery_mode; +} |