it-swarm-vi.com

Làm thế nào để xem các thông báo lỗi khi tôi nhận được màn hình trắng của cái chết?

Làm cách nào tôi có thể thấy các thông báo lỗi khi trang web tôi đang làm việc có màn hình trắng?

25
sokratis

Đặ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);
33
Mike

Màn hình trắng của cái chết (Trang hoàn toàn trống) tài nguyên 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 lỗi không thể phục hồi, thì cả lỗi lẫn nội dung sẽ 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 PHP báo cáo lỗi để nó hiển thị một thông báo trên chính trang đó hoặc kiểm tra tệp nhật ký của bạn (từ máy chủ) để tìm lỗi. 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 lần mở đầu tiên PHP (không chỉnh sửa thông tin tệp thực tế!) Để thêm thông tin 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);
17
iStryker

Hãy xem nhật ký lỗi của Apache, trong Ubuntu, nó nằm ở /var/log/Apache2/error.log để bạn có thể làm:

tail -f /var/log/Apache2/error.log
10
tostinni

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 cấu hình lại PHP của bạn, đặc biệt 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 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 PHP tiện ích mở rộng và tạo tệp theo dõi (xdebug.auto_trace=1).

2
kenorb

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.

1
Manikandan

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.

0
Trincer

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.

0
Saeed Afzal