web-dev-qa-db-ja.com

致命的エラー(WSOD)保護を無効にする方法は?

致命的なエラー処理は、WordPress 5.1および5.2で導入されました。

ホワイトスクリーンオブデス(WSOD)保護と呼ばれることもあります。

開発/ローカルインストールで作業しているときに、必要に応じてサイトを分割できるようにしたい場合があります。 保護されたエンドポイントis_protected_endpoint() を参照)内で作業する場合、サイトの電子メール回復プロセスを回避します。

サイトで技術的な問題が発生しています。手順については、サイト管理者のメール受信トレイを確認してください。

どうすれば致命的なエラー処理を無効にできますか?

12
birgire

wp_is_fatal_error_handler_enabled() 関数のbool出力を2つの方法で変更できます。

絶え間ない

_WP_DISABLE_FATAL_ERROR_HANDLER_ファイル内の_wp-config.php_定数をtrueに設定します。

_/**
 * Disable the fatal error handler.
 */
const WP_DISABLE_FATAL_ERROR_HANDLER = true; 
_

または

_define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );
_

フィルタ

_wp_fatal_error_handler_enabled_ boolフィルターを使用します。

_/**
 * Disable the fatal error handler.
 */
add_filter( 'wp_fatal_error_handler_enabled', '__return_false' );
_

注記

チケットを見る #44458

_wp_fatal_error_handler_enabled_フィルターは、_WP_DISABLE_FATAL_ERROR_HANDLER_定数の値をオーバーライドします。

また、定数disablingとのブールの混乱の可能性に注意してください。ただし、フィルターenablingを使用してください。

私のテストでは、must-useプラグインとしてのフィルターアプローチが期待どおりに機能しないため、代わりに定数を使用しています。うまくいけば、私はこれをさらに調査することができます。

カスタムdrop-inファイル_fatal-error-handler.php_を_wp-content_ディレクトリ( src に追加することもできます。 )、必要に応じて _WP_Fatal_Error_Handler_ クラスをオーバーライドします。別のクラス名を使用する必要があり、handle()メソッドを 登録済みシャットダウン関数 として定義する必要があります。

これを無効にする簡単な例は、デフォルトのエラーハンドラクラスを何もしないカスタムクラスでオーバーライドすることです。

_<?php
class WPSE_Fatal_Error_Handler {
    public function handle() {}
}
return new WPSE_Fatal_Error_Handler;
_

PHP 7+の匿名クラスも同様に機能するようです:

_<?php
return new Class(){
    public function handle() {}
};
_

必要に応じて、デフォルトの_WP_Fatal_Error_Handler_クラスを拡張することもできます。

次に、_WP_SANDBOX_SCRAPING_定数があります。 #46045 を参照

_WP_DEBUG_をtrueに設定すると、WSOD保護は無効になります。これは仕様によるものです。 #46825 を参照

15
birgire