Bagaimana cara menonaktifkan proteksi kesalahan fatal (WSOD)?

12

Penanganan kesalahan fatal diperkenalkan di WordPress 5.1 dan 5.2.

Kadang-kadang disebut sebagai perlindungan White Screen Of Death (WSOD).

Ketika bekerja pada instalasi lokal / dev, kami kadang-kadang ingin dapat memecah situs yang diperlukan, dan misalnya menghindari proses pemulihan email untuk situs ketika bekerja dalam titik akhir yang dilindungi (lihat is_protected_endpoint()):

Situs ini mengalami kesulitan teknis. Silakan periksa kotak masuk email admin situs Anda untuk instruksi.

Bagaimana kita bisa menonaktifkan penanganan kesalahan fatal?

birgire
sumber

Jawaban:

15

Kita dapat memodifikasi output bool dari wp_is_fatal_error_handler_enabled()fungsi dengan dua cara:

Konstan

Setel WP_DISABLE_FATAL_ERROR_HANDLERkonstanta ke truedalam wp-config.phpfile:

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

atau

define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );

Saring

Gunakan wp_fatal_error_handler_enabledfilter bool:

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

Catatan

Lihat tiket # 44458

The wp_fatal_error_handler_enabledfilter akan menimpa nilai WP_DISABLE_FATAL_ERROR_HANDLERkonstan.

Perhatikan juga kemungkinan bool kebingungan dengan penonaktifan yang konstan tetapi saringan diaktifkan .

Dalam pengujian saya pendekatan filter, sebagai plugin yang harus digunakan , tidak berfungsi seperti yang diharapkan, jadi saya menggunakan konstanta. Semoga saya bisa melihat lebih jauh.

Satu juga dapat menambahkan kustom drop-in berkas fatal-error-handler.phpke wp-contentdirektori ( src ), untuk menimpa WP_Fatal_Error_Handlerkelas yang diperlukan. Kita harus menggunakan nama kelas yang berbeda dan itu harus mendefinisikan handle()metode sebagai fungsi shutdown terdaftar .

Contoh sederhana untuk menonaktifkannya adalah mengganti kelas penanganan kesalahan default dengan yang kustom yang tidak melakukan apa-apa:

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

Kelas anonim di PHP 7+ tampaknya juga berfungsi:

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

Itu juga bisa memperluas WP_Fatal_Error_Handlerkelas default jika diperlukan.

Lalu ada WP_SANDBOX_SCRAPINGkonstanta. Lihat # 46045

Pengaturan yang WP_DEBUGbenar tidak akan menonaktifkan perlindungan WSOD. Ini dengan desain. Lihat # 46825

birgire
sumber