Ini seharusnya menjadi hal yang paling mudah untuk dilakukan, tetapi untuk beberapa alasan saya tidak bisa menyelesaikannya.
Saya mencoba untuk mendapatkan halaman kesalahan statis yang ramah untuk menggantikan 500 skenario jahat. Untuk saat ini saya hanya mencoba mereplikasi situasi 500 di komputer lokal saya (Drupal 7 berjalan di MAMP) dengan melemparkan beberapa karakter omong kosong di bagian atas template.php di tema saya, yang memicu 500 situasi, tetapi untuk beberapa alasan direktif ErrorDocument di .htaccess
file konfigurasi saya atau Apache tidak berpengaruh.
Yang saya lakukan cukup sederhana ini:
ErrorDocument 500 /500.html
Dan saya memiliki halaman html statis paling sederhana di root situs saya dengan nama 500.html.
Namun, ketika saya dengan sengaja memecah template.php, saya mendapatkan White Screen Of Death yang ditakuti alih-alih halaman kesalahan ramah yang bagus.
Apa yang saya lakukan salah di sini? Saya sudah melakukan ini satu miliar kali dalam pengaturan non-Drupal tetapi tidak bisa mengatasinya.
PEMBARUAN : Tampaknya pertanyaan ini cukup berlebihan dalam kasus penggunaan khusus saya saat ini sebagai Dev Cloud Acquia yang kami gunakan untuk menjalankan aplikasi yang dipermasalahkan bahkan tidak mendukung penyesuaian halaman kesalahan 500-seri saat ini. Kami berharap mereka akan segera mengimplementasikan dukungan untuk itu.
sumber
drupal_add_http_header('Status', '503 Service Unavailable');
500.html Anda?Jawaban:
500 halaman kesalahan hanyalah halaman kesalahan server. Setelah server menyerahkan eksekusi ke PHP, Drupal / PHP bertanggung jawab untuk melayani halaman kesalahan mereka sendiri. Anda dapat mencoba memberi tahu Drupal untuk mengarahkan pengguna ke halaman kesalahan khusus, bersama dengan tajuk status HTTP 500, ketika menerima kesalahan tertentu dalam sebuah
try...catch
blok.Namun, perhatikan bahwa beberapa WSOD dapat terjadi pada tingkat sistem dan mereka dapat menyebabkan kesalahan fatal yang segera menghentikan eksekusi dan mungkin mencegah
catch
eksekusi . Salah satu contohnya adalah ketika basis data Anda tidak disetel dengan benar untuk menangani permintaan ukuran tertentu (seperti ketika melakukan Fitur mengembalikan semua operasi) - database mungkin tersedak, memberi Anda insta-WSOD.Saya akan mengatakan hal terbaik untuk dilakukan adalah memeriksa apache, MySQL dan PHP error logs Anda, dan mencoba untuk mengisolasi akar penyebab WSOD berdasarkan kasus per kasus, sebagai lawan dari mencoba untuk menutupinya dengan cukup- halaman kesalahan. Sementara kesalahan yang menyebabkan halaman kesalahan 500 server tipikal kadang-kadang tidak dapat dihindari, dan memiliki halaman kesalahan server kustom dalam produksi adalah layak, memiliki WSODs terjadi langsung tidak.
Sepertinya Anda memiliki halaman kesalahan server yang diatur dengan benar. Anda hanya perlu membuat perbedaan bahwa halaman kesalahan server tipikal! = WSODs. Halaman kesalahan server dapat dipicu karena lalu lintas tinggi dan kemacetan sumber daya, tetapi Anda seharusnya tidak benar-benar mengalami WSODs dalam produksi, titik. Ini biasanya terjadi karena pengkodean, optimasi, atau konfigurasi yang buruk. Jika Anda masih melihat WSOD, pastikan Anda menemukan (dan menyelesaikan) akar masalah terlebih dahulu, sebagai lawan dari mencoba menerapkan bantuan band untuk itu.
sumber
Anda mendapatkan WSOD karena Anda menonaktifkan pelaporan kesalahan di php.ini. Ini adalah masalah keamanan - jika Anda memiliki kesalahan dan peretas melihat apa itu, ia berpotensi menggunakannya untuk meretas situs tersebut.
Jika Anda ingin mencegat kesalahan, Anda harus mengaktifkan menampilkan kesalahan di php.ini (contohnya hanya akan menampilkan kesalahan serius):
Dan kemudian, Anda dapat mengatur dokumen kesalahan di file htaccess:
Atau, Anda dapat menentukan kesalahan dalam file settings.php Drupal .
Di NGINX:
Karena Anda menjalankan Apache di MAMP, atur di .htaccess. Ingat bahwa
AllowOverride
dalam apache config harusnya aktif (biasanya itu).sumber
ErrorDocument
arahan untuk 500 tanggapan di Drupal tidak berfungsi dalam pengujian sayaSudahkah Anda mengaktifkan pelaporan kesalahan? (admin / config / development / logging -> Setel Semua pesan untuk menampilkan pesan Kesalahan )
Secara default, Drupal menunjukkan WSOD sebagai fitur keamanan.
sumber
Saya kira jawabannya adalah "baca dokumen", lihat https://www.drupal.org/node/195435
Jadi pada dasarnya Anda dapat membuat file template bernama
maintenance-page.tpl.php
danmaintenance-page--offline.tpl.php
dan kode keras beberapa pengaturan disettings.php
.EDIT:
Ini tampaknya tidak peduli apa tingkat
error_reporting
diatur atau apakah Anda telah menetapkandisplay_errors
untukon
atauoff
. Ketika Anda memilikimaintenance-page--offline.tpl.php
file di tempat Drupal akan menampilkan halaman ini ketika database hilang. Juga tidak masalah apa yang telah Anda atur di/admin/config/development/logging
sisi admin. Jika Anda hanya memiliki kesalahan sintaks, yang merupakan situasi OP, itu tidak akan benar-benar memicu 500, itu adalah 200 dengan kesalahan PHP baik ditampilkan atau disembunyikan berdasarkanphp.ini
display_error
set. Tidak ada cara, yang saya tahu, selain menambahkan logika penanganan kesalahan khusus Anda di seluruh kode kustom Anda sesuai kebutuhan.sumber
Untuk mengganti semua WSOD dengan hal lain akan membutuhkan inti peretasan: Anda tidak ingin melakukan ini. Drupal mendefinisikan penangan kesalahannya sendiri di bootstrap.inc dan errors.inc. Jika Anda dipusingkan dengan kode itu, Anda harus memastikan Anda memperhitungkan semua hal yang bisa salah ketika eksekusi mencapai tahap ini (tidak ada database, tidak ada mesin tema, tidak ada tema, tidak ada konfigurasi, dll).
sumber
Saya membuat proyek kotak pasir untuk melakukan ini.
Saya dapat mencapai ini dengan memperluas HttpExceptionSubscriberBase di /src/EventSubscriber/fivehundredEventSubscriber.php
Dan Anda harus menambahkan layanan di module.services.yml Anda
sumber