Bagaimana saya membungkam kesalahan PHP?

32

Apakah ada cara untuk membungkam semua kesalahan, peringatan, dan pemberitahuan PHP di Drupal? Mereka berguna di situs devel tetapi mereka adalah risiko keamanan yang besar, dan membuat situs tampak buruk di siaran langsung.

Saya tahu pada Drupal 6 halaman di admin / pengaturan / pelaporan kesalahan dapat menghentikan Drupal dari menulis kesalahan ke layar, tetapi di mana saya bisa menemukannya di Drupal 7? Sepertinya itu hilang.

drupal_stuff_alter
sumber
3
Namun perlu dicatat bahwa kesalahan memiliki peran yang sangat penting: kesalahan mengindikasikan bahwa ada sesuatu yang salah. Mengejutkan itu, tidak menyelesaikan masalah yang mendasarinya. Ini juga disebut "Metode Rusia": Ketika lampu alarm di pabrik nuklir mulai berkedip, lepaskan bola lampu saja. Alarm-light tidak lagi berkedip; tidak ada masalah.
berkelanjutan
Lucu :). Tapi saya hanya menekan kesalahan di situs produksi.
drupal_stuff_alter
Drupal memiliki opsi untuk memutuskan kesalahan mana yang harus ditampilkan; kesalahan yang tidak ditampilkan masih dicatat dalam database, dan ditampilkan di admin / laporan / dblog.
kiamlaluno
@kiamlaluno, dalam produksi yang agak baik-baik saja (namun menunjukkan kesalahan bahwa pembayaran gagal selalu lebih baik daripada meninggalkan klien Anda dalam ketidakpastian). Tetapi dalam pengembangan dan pengujian pengalaman saya adalah bahwa kesalahan yang didorong ke dblog diabaikan. Drupalsites dengan ratusan pemberitahuan dan peringatan per jam dicatat di sana, tidak terkecuali. Dan pengecualian dan kesalahan nyata hilang dalam kebisingan. Yang terbaik adalah mendorong setiap pemberitahuan dengan keras ke wajah pengembang.
berkelanjutan
Benar, tetapi OP tampaknya tertarik untuk menyembunyikan kesalahan itu di situs produksi. (Lihat, "Mereka berguna di situs devel tetapi mereka memiliki risiko keamanan yang besar, dan membuat situs tersebut tampak buruk di siaran langsung.")
kiamlaluno

Jawaban:

29

Path berubah, seperti pada Drupal 7 halaman yang sama yang sebelumnya akan Anda lihat di admin / pengaturan / pelaporan kesalahan sekarang di admin / config / development / logging.

tangkapan layar

kiamlaluno
sumber
1
Untuk beberapa alasan, saya tidak dapat melakukan ini. Pada klik simpan pilihan saya semakin diatur ulang. Apakah ada cara saya dapat mengubah ini secara manual dalam database atau sesuatu seperti ini ??
Niranjan N Raju
17

Seperti yang disarankan, pada Administration » Configuration » Development(at /admin/config/development/logging) Anda dapat menemukan pengaturan untuk menonaktifkan menampilkan pesan kesalahan, tetapi itu tidak akan menonaktifkan sepenuhnya kesalahan / pemberitahuan.

Itu karena Drupal 7 memberlakukan E_ALL, jadi mereka masih menulis ke syslog dan Anda dapat melihatnya di log terbaru yang memengaruhi kinerja situs web Anda.

Untuk menonaktifkan pemberitahuan sepenuhnya, Anda harus menambahkan baris berikut ke dalam settings.phpatau php.iniberkas:

ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

Tampilkan semua kesalahan, kecuali untuk pemberitahuan dan peringatan standar pengkodean.

Untuk membungkam semua kesalahan PHP, yang tidak disarankan, Anda dapat mencoba menambahkan dalam file pengaturan Anda:

error_reporting(0); // Disable all errors.

Lihat: error_reporting()


Kode inti Drupal 7 yang bertanggung jawab untuk E_ALLlogging (file includes/bootstrap.inc:):

// Enforce E_ALL, but allow users to set levels not part of E_ALL.
error_reporting(E_ALL | error_reporting());

Lihat juga:

kenorb
sumber
4

Satu hal yang tidak disebutkan oleh siapa pun yang mungkin bermanfaat bagi orang untuk mengetahui adalah bahwa Drupal 7 mengabaikan semua tingkat pelaporan kesalahan sistem lokal. Jadi, Anda tidak dapat menggunakan .htaccess atau bahkan php.ini untuk mengatur level pelaporan kesalahan php di Drupal.

Ada tambalan yang diusulkan untuk ini di D8, tetapi saat ini di D7 Anda terbatas pada 3 topeng kesalahan - semua, tidak ada, atau kesalahan & peringatan - yang ditetapkan pada halaman admin yang ditunjukkan kiamlaluno.

hutan
sumber
3

Pengaturan selalu di admin / config / pengembangan / logging :)

Remon
sumber
Terima kasih banyak! Saya masih ingin agar notifikasi hijau tetap hidup. Semoga mereka tidak menghilang.
drupal_stuff_alter
2

Tidak yakin mengapa metode Drush sangat tidak berdokumen, tetapi ada dalam skrip build saya:

drush vset error_level 0

... yang menyimpan pesan kesalahan ke log tetapi tidak muncul di layar.

Matt Fletcher
sumber
1

Anda mungkin perlu menambahkan kutipan ke solusi kenorb yang diposting di atas:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');
Greg Lund-Chaix
sumber
Ini salah - itu adalah konstanta, tidak boleh dikutip. error_reporting adalah nilai integer yang terdiri dari konstanta integer ORed bersama-sama. Ini bukan pengaturan string yang terdiri dari nama konstan seperti yang Anda dapatkan di sini.
datashaman
0

Ada modul untuk itu:

https://www.drupal.org/project/errorlevelpermission

Dari halaman proyek:

Jadi kamu bisa

  • memiliki peran sitebuilder (atau bahkan peran debugger khusus) melihat kesalahan dan pemberitahuan
  • memiliki orang lain tidak melihat kesalahan dan pemberitahuan.
geek-merlin
sumber