Làm cách nào để vô hiệu hóa bảo vệ lỗi nghiêm trọng (WSOD)?


12

Việc xử lý lỗi nghiêm trọng đã được giới thiệu trong WordPress 5.1 và 5.2.

Đôi khi, nó được gọi là bảo vệ màn hình trắng (WSOD).

Khi làm việc trên các bản cài đặt dev / local, đôi khi chúng tôi muốn có thể phá vỡ các trang web khi cần và ví dụ: tránh quá trình khôi phục email cho trang web khi làm việc trong một điểm cuối được bảo vệ (xem is_protected_endpoint()):

Trang web đang gặp khó khăn về kỹ thuật. Vui lòng kiểm tra hộp thư email quản trị trang web của bạn để được hướng dẫn.

Làm thế nào chúng ta có thể vô hiệu hóa xử lý lỗi nghiêm trọng?

Câu trả lời:


15

Chúng ta có thể sửa đổi đầu ra bool của wp_is_fatal_error_handler_enabled()hàm theo hai cách:

Không thay đổi

Đặt WP_DISABLE_FATAL_ERROR_HANDLERhằng số truetrong wp-config.phptệp:

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

hoặc là

define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );

Bộ lọc

Sử dụng wp_fatal_error_handler_enabledbộ lọc bool:

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

Ghi chú

Xem vé # 44458

Bộ wp_fatal_error_handler_enabledlọc sẽ ghi đè giá trị của WP_DISABLE_FATAL_ERROR_HANDLERhằng.

Ngoài ra, xem ra một sự nhầm lẫn bool có thể với việc vô hiệu hóa liên tục nhưng cho phép bộ lọc .

Trong thử nghiệm của tôi, cách tiếp cận bộ lọc, như một plugin phải sử dụng , không hoạt động như mong đợi, vì vậy tôi đang sử dụng hằng số thay thế. Hy vọng tôi có thể nhìn vào điều này hơn nữa.

Người ta cũng có thể thêm một tệp thả vào tùy chỉnh fatal-error-handler.phpvào wp-contentthư mục ( src ), để ghi đè WP_Fatal_Error_Handlerlớp khi cần. Chúng ta phải sử dụng một tên lớp khác và nó phải định nghĩa handle()phương thức là hàm tắt máy đã đăng ký .

Một ví dụ đơn giản để vô hiệu hóa nó sẽ là ghi đè lớp trình xử lý lỗi mặc định bằng một lớp tùy chỉnh không có gì:

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

Lớp ẩn danh trong PHP 7+ dường như cũng hoạt động:

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

Nó cũng có thể mở rộng WP_Fatal_Error_Handlerlớp mặc định nếu cần.

Sau đó, có WP_SANDBOX_SCRAPINGhằng số. Xem # 46045

Đặt WP_DEBUGđúng là sẽ không vô hiệu hóa bảo vệ WSOD. Đây là do thiết kế. Xem # 46825

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.