Bootstrap/Load: Ensure that the fatal error shutdown handler does not prevent other shutdown handlers from being called.
This changeset adds support for a new `wp_die()` argument `exit`, which defaults to true and determines whether `wp_die()` should actually terminate the request. The new fatal error handler then calls `wp_die()` with that argument set to false, as calling `die()` or `exit` from a PHP shutdown function prevents other shutdown functions from being called. Props schlessera, johnbillion. Fixes #46038. See #44458. Built from https://develop.svn.wordpress.org/trunk@44671 git-svn-id: http://core.svn.wordpress.org/trunk@44502 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
e992ae3ea2
commit
6645578424
|
@ -136,7 +136,7 @@ class WP_Shutdown_Handler {
|
||||||
$php_error_pluggable = WP_CONTENT_DIR . '/php-error.php';
|
$php_error_pluggable = WP_CONTENT_DIR . '/php-error.php';
|
||||||
if ( is_readable( $php_error_pluggable ) ) {
|
if ( is_readable( $php_error_pluggable ) ) {
|
||||||
require_once $php_error_pluggable;
|
require_once $php_error_pluggable;
|
||||||
die();
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,7 +166,10 @@ class WP_Shutdown_Handler {
|
||||||
|
|
||||||
$message = __( 'The site is experiencing technical difficulties.' );
|
$message = __( 'The site is experiencing technical difficulties.' );
|
||||||
|
|
||||||
$args = array( 'response' => 500 );
|
$args = array(
|
||||||
|
'response' => 500,
|
||||||
|
'exit' => false,
|
||||||
|
);
|
||||||
if ( function_exists( 'admin_url' ) ) {
|
if ( function_exists( 'admin_url' ) ) {
|
||||||
$args['link_url'] = admin_url();
|
$args['link_url'] = admin_url();
|
||||||
$args['link_text'] = __( 'Log into the admin backend to fix this.' );
|
$args['link_text'] = __( 'Log into the admin backend to fix this.' );
|
||||||
|
|
|
@ -2957,6 +2957,7 @@ function wp_nonce_ays( $action ) {
|
||||||
* Default is the value of is_rtl().
|
* Default is the value of is_rtl().
|
||||||
* @type string $code Error code to use. Default is 'wp_die', or the main error code if $message
|
* @type string $code Error code to use. Default is 'wp_die', or the main error code if $message
|
||||||
* is a WP_Error.
|
* is a WP_Error.
|
||||||
|
* @type bool $exit Whether to exit the process after completion. Default true.
|
||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
function wp_die( $message = '', $title = '', $args = array() ) {
|
function wp_die( $message = '', $title = '', $args = array() ) {
|
||||||
|
@ -3201,7 +3202,9 @@ function _default_wp_die_handler( $message, $title = '', $args = array() ) {
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
<?php
|
<?php
|
||||||
die();
|
if ( $r['exit'] ) {
|
||||||
|
die();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3236,7 +3239,9 @@ function _json_wp_die_handler( $message, $title = '', $args = array() ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
echo wp_json_encode( $data );
|
echo wp_json_encode( $data );
|
||||||
die();
|
if ( $r['exit'] ) {
|
||||||
|
die();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3262,7 +3267,9 @@ function _xmlrpc_wp_die_handler( $message, $title = '', $args = array() ) {
|
||||||
$error = new IXR_Error( $r['response'], $message );
|
$error = new IXR_Error( $r['response'], $message );
|
||||||
$wp_xmlrpc_server->output( $error->getXml() );
|
$wp_xmlrpc_server->output( $error->getXml() );
|
||||||
}
|
}
|
||||||
die();
|
if ( $r['exit'] ) {
|
||||||
|
die();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3291,9 +3298,16 @@ function _ajax_wp_die_handler( $message, $title = '', $args = array() ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( is_scalar( $message ) ) {
|
if ( is_scalar( $message ) ) {
|
||||||
die( (string) $message );
|
$message = (string) $message;
|
||||||
|
} else {
|
||||||
|
$message = '0';
|
||||||
}
|
}
|
||||||
die( '0' );
|
|
||||||
|
if ( $r['exit'] ) {
|
||||||
|
die( $message );
|
||||||
|
}
|
||||||
|
|
||||||
|
echo $message;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3302,15 +3316,26 @@ function _ajax_wp_die_handler( $message, $title = '', $args = array() ) {
|
||||||
* This is the handler for wp_die when processing APP requests.
|
* This is the handler for wp_die when processing APP requests.
|
||||||
*
|
*
|
||||||
* @since 3.4.0
|
* @since 3.4.0
|
||||||
|
* @since 5.1.0 Added the $title and $args parameters.
|
||||||
* @access private
|
* @access private
|
||||||
*
|
*
|
||||||
* @param string $message Optional. Response to print. Default empty.
|
* @param string $message Optional. Response to print. Default empty.
|
||||||
|
* @param string $title Optional. Error title (unused). Default empty.
|
||||||
|
* @param string|array $args Optional. Arguments to control behavior. Default empty array.
|
||||||
*/
|
*/
|
||||||
function _scalar_wp_die_handler( $message = '' ) {
|
function _scalar_wp_die_handler( $message = '', $title = '', $args = array() ) {
|
||||||
if ( is_scalar( $message ) ) {
|
list( $message, $title, $r ) = _wp_die_process_input( $message, $title, $args );
|
||||||
die( (string) $message );
|
|
||||||
|
if ( $r['exit'] ) {
|
||||||
|
if ( is_scalar( $message ) ) {
|
||||||
|
die( (string) $message );
|
||||||
|
}
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( is_scalar( $message ) ) {
|
||||||
|
echo (string) $message;
|
||||||
}
|
}
|
||||||
die();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3328,6 +3353,7 @@ function _wp_die_process_input( $message, $title = '', $args = array() ) {
|
||||||
$defaults = array(
|
$defaults = array(
|
||||||
'response' => 0,
|
'response' => 0,
|
||||||
'code' => '',
|
'code' => '',
|
||||||
|
'exit' => true,
|
||||||
'back_link' => false,
|
'back_link' => false,
|
||||||
'link_url' => '',
|
'link_url' => '',
|
||||||
'link_text' => '',
|
'link_text' => '',
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
*
|
*
|
||||||
* @global string $wp_version
|
* @global string $wp_version
|
||||||
*/
|
*/
|
||||||
$wp_version = '5.1-beta1-44670';
|
$wp_version = '5.1-beta1-44671';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||||
|
|
Loading…
Reference in New Issue