Câu trả lời:
Đặt cái này ở dưới cùng của settings.php:
error_reporting(-1); // Have PHP complain about absolutely everything
$conf['error_level'] = 2; // Show all messages on your screen, 2 = ERROR_REPORTING_DISPLAY_ALL.
ini_set('display_errors', TRUE); // These lines just give you content on WSOD pages.
ini_set('display_startup_errors', TRUE);
Tài nguyên của Màn hình trắng (Trang hoàn toàn trống) trên drupal.org sẽ hướng dẫn bạn các bước để xem thông báo lỗi cũng như các sự cố phổ biến gây ra chúng.
Lỗi "vô hình"
Nếu báo cáo lỗi bị tắt, bạn có thể nhận được một lỗi nghiêm trọng nhưng không nhìn thấy nó. Trên một trang web sản xuất, thông thường đã tắt báo cáo lỗi. Nếu đó là trường hợp và PHP đã gặp phải một lỗi không thể phục hồi, thì cả lỗi lẫn nội dung đều không được hiển thị, do đó bạn kết thúc với một trang hoàn toàn trống.
Những gì bạn có thể làm về việc này là bật báo cáo lỗi PHP để nó hiển thị một thông báo trên chính trang đó hoặc kiểm tra các tệp nhật ký của bạn (từ máy chủ) để tìm lỗi. Làm thế nào để làm cả hai điều này được giải thích dưới đây.
Bật báo cáo lỗi
Mặc dù nó có thể bị tắt trên các máy chủ thương mại và trang web sản xuất (vì lý do chính đáng để người dùng không thấy lỗi), những lỗi này là một trong những công cụ tốt nhất để khắc phục sự cố của bạn. Để bật báo cáo lỗi, hãy tạm thời chỉnh sửa tệp index.php của bạn (thường nằm trong thư mục gốc của bạn) ngay sau thẻ PHP mở đầu tiên (không chỉnh sửa thông tin tệp thực tế!) Để thêm vào như sau:
error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);
Bây giờ bạn sẽ có thể thấy bất kỳ lỗi nào xảy ra trực tiếp trên màn hình. Vấn đề bộ nhớ có thể vẫn không được hiển thị, nhưng đó là bước đầu tiên trong quá trình loại bỏ.
Nếu bạn đang sử dụng thiết lập nhiều trang và chỉ muốn xuất hiện lỗi cho một trang, thì hãy kiểm tra tên của máy chủ trước như trong:
if ($_SERVER['HTTP_HOST']==='some.domain.name.here') { error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); }
Nếu sự cố xảy ra trong khi chạy update.php, hãy mở update.php trong trình soạn thảo văn bản và bỏ ghi chú dòng sau:
ini_set('display_errors', FALSE);
Hãy xem nhật ký lỗi của Apache, trong Ubuntu, nó nằm ở đâu /var/log/apache2/error.log
để bạn có thể làm:
tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/error.log
Tôi đã tìm thấy cách dễ dàng để theo dõi các lỗi WSOD bằng cách chạy toàn bộ trang web thông qua drush
, ví dụ:
drush rs
Sau đó truy cập trang web tại địa chỉ mới đã cho (ví dụ 127.0.0.1:8080
), sau đó thử tái tạo sự cố và bạn sẽ thấy tất cả các lỗi trên màn hình thiết bị đầu cuối. Không cần phải cấu hình lại PHP của bạn, đặc biệt là trong các trường hợp khi display_errors
thất bại (ví dụ MAMP).
Một cách khó khăn khác mà tôi đã tìm thấy nó bằng cách sử dụng trình gỡ lỗi, ví dụ:
HĐH X:
sudo dtruss -fn httpd 2>&1 | grep -i error
Linux:
sudo strace -f $(pgrep -fn httpd) 2>&1 | grep -i error
Lưu ý: Thay đổi httpd
thành php
nếu bạn đang sử dụng drush rs
như trên.
Hoặc cài đặt XDebug
phần mở rộng PHP và tạo tệp theo dõi ( xdebug.auto_trace=1
).
Nếu bạn đang sử dụng drush, bạn có thể thấy các thông báo lỗi bằng lệnh drush-ws.
Tôi vừa thay đổi giá trị $ update_free_access từ FALSE thành TRUE và thực hiện tệp update.php. Nó giải quyết vấn đề của tôi.
Bạn có thể sửa đổi index.php và bọc mã bằng một lần thử / bắt. Như thế này:
try {
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
menu_execute_active_handler();
} catch (Error $t) {
error_log('Error at Line:' . $t->getLine() . ' File: ' . $t->getFile() . ' Message:' . $t->getMessage() );
print '<div>Message: ' . $t->getMessage() . '</div>';
print '<div>File:' . $t->getFile() . '</div>';
print '<div>Line:' . $t->getLine() . '</div>';
}
Thông báo lỗi sẽ hiển thị tệp và dòng mã gây ra lỗi.