Go to file
Felix Arntz fc37b1746e Bootstrap/Load: Introduce fatal error recovery mechanism allowing users to still log in to their admin dashboard.
This changeset introduces a `WP_Shutdown_Handler` class that detects fatal errors and which extension (plugin or theme) causes them. Such an error is then recorded, and an error message is displayed. Subsequently, in certain protected areas, for example the admin, the broken extension will be paused, ensuring that the website is still usable in the respective area. The major benefit is that this mechanism allows site owners to still log in to their website, to fix the problem by either disabling the extension or solving the bug and then resuming the extension.

Extensions are only paused in certain designated areas. The frontend for example stays unaffected, as it is impossible to know what pausing the extension would cause to be missing, so it might be preferrable to clearly see that the website is temporarily not accessible instead.

The fatal error recovery is especially important in scope of encouraging the switch to a maintained PHP version, as not necessarily every WordPress extension is compatible with all PHP versions. If problems occur now, non-technical site owners that do not have immediate access to the codebase are not locked out of their site and can at least temporarily solve the problem quickly.

Websites that have custom requirements in that regard can implement their own shutdown handler by adding a `shutdown-handler.php` drop-in that returns the handler instance to use, which must be based on a class that inherits `WP_Shutdown_Handler`. That handler will then be used in place of the default one.

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.

Props afragen, bradleyt, flixos90, ocean90, schlessera, SergeyBiryukov, spacedmonkey.
Fixes #44458.


git-svn-id: https://develop.svn.wordpress.org/trunk@44524 602fd350-edb4-49c9-b593-d223f7449a82
2019-01-09 20:04:55 +00:00
src Bootstrap/Load: Introduce fatal error recovery mechanism allowing users to still log in to their admin dashboard. 2019-01-09 20:04:55 +00:00
tests Build/Test Tools: Fix coding standards issues after [44515] and [44514]. 2019-01-09 12:36:43 +00:00
tools Build tools: Allow building WordPress to src. 2018-12-24 13:28:22 +00:00
.editorconfig General: Instruct file editors not to trim trailing whitespace in markdown files. 2018-03-20 22:14:53 +00:00
.gitignore Build/Test Tools: Update .gitignore to exclude twentynineteen and twentysixteen. 2019-01-09 13:44:30 +00:00
.jshintrc Build tools: Fix the travis:js build. 2018-12-24 13:53:11 +00:00
.npmrc Once upon a midnight dreary, while I coded, weak and weary, 2018-05-23 10:04:22 +00:00
.nvmrc Once upon a midnight dreary, while I coded, weak and weary, 2018-05-23 10:04:22 +00:00
.travis.yml Build Tools: Switch to Node 10.13.0. 2018-12-16 01:42:24 +00:00
composer.json Coding Standards: Upgrade WPCS to 1.0.0 2018-08-17 01:50:26 +00:00
composer.lock Coding Standards: Upgrade WPCS to 1.0.0 2018-08-17 01:50:26 +00:00
Gruntfile.js Build tools: Fix the travis:js build. 2018-12-24 13:53:11 +00:00
jsdoc.conf.json Build Tools: Fix JSDoc configuration include paths. 2018-06-14 12:45:06 +00:00
package-lock.json Multisite: Move site-specific metadata integrations from the wrapper functions to the low-level Meta API functions. 2019-01-08 08:47:37 +00:00
package.json Block Editor: Upgrade @WordPress packages to the latest versions. 2019-01-04 19:37:30 +00:00
phpcs.xml.dist Build/Tools: Fix typo in phpcs.xml.dist. 2019-01-09 10:01:32 +00:00
phpunit.xml.dist REST API: Introduce Autosaves controller and endpoint. 2018-12-13 22:41:47 +00:00
webpack.config.js Build tools: Allow building WordPress to src. 2018-12-24 13:28:22 +00:00
wp-cli.yml Build/Tests: Default to running unit tests from src. 2019-01-09 10:09:02 +00:00
wp-config-sample.php General: Replace "Happy blogging" with "Happy publishing". 2019-01-08 04:29:06 +00:00
wp-tests-config-sample.php Tests: Revert [44509]. 2019-01-09 11:13:03 +00:00