summaryrefslogtreecommitdiffstats
path: root/wp-includes/error-protection.php
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
commita415c29efee45520ae252d2aa28f1083a521cd7b (patch)
treef4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/error-protection.php
parentInitial commit. (diff)
downloadwordpress-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.php157
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;
+}