Bagaimana cara melihat pesan kesalahan ketika saya mendapatkan layar putih kematian?


25

Bagaimana saya bisa melihat pesan kesalahan ketika situs saya bekerja mendapat layar putih?

Jawaban:


33

Letakkan ini di bagian bawah 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);

Ini bagus untuk situs pengembangan meskipun saya lebih suka /var/log/apache2/error.log untuk situs langsung. Tapi ini berhasil. :)
Citricguy

17

Sumber daya Layar Putih Kematian (Halaman Sepenuhnya Kosong) di drupal.org akan memandu Anda melalui langkah-langkah untuk melihat pesan kesalahan serta masalah umum yang menyebabkannya.

Kesalahan "Tak Terlihat"

Jika pelaporan kesalahan dimatikan, Anda bisa mendapatkan kesalahan fatal tetapi tidak melihatnya. Di situs produksi, pelaporan kesalahan dimatikan. Jika itu masalahnya dan PHP telah menemukan kesalahan yang tidak dapat dipulihkan, baik kesalahan maupun konten tidak akan ditampilkan, oleh karena itu Anda berakhir dengan halaman yang benar-benar kosong.

Apa yang dapat Anda lakukan tentang hal ini adalah mengaktifkan pelaporan kesalahan PHP sehingga menampilkan pesan pada halaman itu sendiri, atau memeriksa file log Anda (dari server) untuk mencari kesalahan. Cara melakukan keduanya dijelaskan di bawah ini.

Aktifkan Pelaporan Kesalahan

Meskipun mungkin dimatikan pada host komersial dan situs produksi (untuk alasan yang baik, sehingga pengguna tidak melihat kesalahan), kesalahan ini adalah salah satu alat terbaik Anda untuk pemecahan masalah. Untuk mengaktifkan pelaporan kesalahan, edit sementara file index.php Anda (biasanya terletak di direktori root Anda) langsung setelah tag PHP pembuka pertama (jangan edit info file yang sebenarnya!) Untuk menambahkan yang berikut:

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

Anda sekarang dapat melihat kesalahan yang terjadi langsung di layar. Masalah memori mungkin masih belum ditampilkan, tetapi ini adalah langkah pertama dalam proses eliminasi.

Jika Anda menggunakan pengaturan multi-situs dan hanya ingin kesalahan muncul untuk satu situs, maka periksa nama host terlebih dahulu seperti pada:

if ($_SERVER['HTTP_HOST']==='some.domain.name.here') {
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
}

Jika masalah terjadi saat menjalankan update.php buka update.php dalam editor teks dan batalkan komentar pada baris berikut:

ini_set('display_errors', FALSE);

10

Lihatlah log kesalahan Apache, di Ubuntu itu terletak di /var/log/apache2/error.logsehingga Anda dapat melakukan:

tail -f /var/log/apache2/error.log

2
sudo tail -f /var/log/apache2/error.log
Citricguy

1
jika Anda memiliki banyak vhosts dengan file log khusus untuk masing-masingnya, gunakan saja ini: sudo tail -f /var/log/apache2/*.log lalu segarkan halaman yang berakhir dengan wsod
iz

2

Saya menemukan cara mudah melacak kesalahan WSOD dengan menjalankan seluruh situs melalui drush, misalnya:

drush rs

Setelah itu mengakses situs di alamat baru yang diberikan (mis. 127.0.0.1:8080), Lalu coba mereproduksi masalahnya, dan Anda akan melihat semua kesalahan pada layar terminal. Tidak perlu mengkonfigurasi ulang PHP Anda, terutama jika display_errorsgagal (mis. MAMP).


Cara rumit lain yang saya temukan dengan menggunakan debugger, misalnya:

  • OS X:

    sudo dtruss -fn httpd 2>&1 | grep -i error
  • Linux:

    sudo strace -f $(pgrep -fn httpd) 2>&1 | grep -i error

    Catatan: Ubah httpdmenjadi phpjika Anda menggunakan drush rsseperti di atas.

Atau menginstal XDebugekstensi PHP dan menghasilkan file jejak ( xdebug.auto_trace=1).


1
Anda Tuan, adalah penyelamat. Tidak ada satu pun dari pengaturan php yang berubah yang berhasil bagi saya, tetapi ini berhasil!
Greg Somers

1

Jika Anda menggunakan drush, Anda dapat melihat pesan kesalahan menggunakan perintah drush-ws.


0

Saya baru saja mengubah nilai variabel $ update_free_access dari FALSE ke TRUE dan mengeksekusi file update.php. Itu menyelesaikan masalah saya.


0

Anda dapat mengubah index.php dan membungkus kode dengan try / catch. Seperti ini:

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>';
}

Pesan Kesalahan akan menampilkan file dan baris kode yang menyebabkan kesalahan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.