123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- <?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 ( 0 === strpos( $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;
- }
|