PHP hatalarını nasıl susturabilirim?


32

Drupal'daki tüm PHP hatalarını, uyarılarını ve bildirimlerini susturmanın bir yolu var mı? Devel sitesinde çok faydalılar ama büyük bir güvenlik riski taşıyorlar ve sitenin canlı görünmesini engelliyorlar.

Drupal 6'da admin / settings / error-rapor sayfasındaki sayfanın Drupal'ın ekrana hata yazmasını engelleyebileceğini biliyorum, ancak bunu Drupal 7'de nerede bulabilirim? Eksik görünüyor.


3
Ancak, bu hataların çok önemli bir rolü olduğunu unutmayın: bir şeyin yanlış olduğunu gösterirler. Bunu bastırmak, altta yatan sorunu çözmez. Buna "Rus Yöntemi" de denir: Bir nükleer santraldeki alarm ışığı yanıp sönmeye başladığında, sadece ampulü çıkarın. Alarm ışığı artık yanıp sönmüyor; sorun yok.
berkes

Komik :) Ama ben sadece üretim sahasındaki hatayı bastırdım.
drupal_stuff_alter 14:11

Drupal hangi hataların gösterilmesi gerektiğine karar verme seçeneğine sahiptir; görüntülenemeyen hatalar hala veritabanına kaydedilir ve admin / report / dblog'da gösterilir.
kiamlaluno

@kiamlaluno, üretimde biraz iyi (henüz bir ödemenin başarısız olduğu konusunda hata sunmak, müşterinizi belirsizlik içinde bırakmaktan sonra her zaman daha iyidir). Ancak geliştirme ve testlerde benim deneyimim, dblog'a aktarılan hataların ihmal edilmesidir. Orada kaydedilen saat başına yüzlerce ihbar ve uyarı içeren drupalsites, istisna değildir. Ve gerçek istisnalar ve hatalar gürültüde kayboluyor. En iyisi, her bildirimi geliştiricinin yüzüne zorla sokmaktır.
berkes

Doğru, ancak OP bir üretim sahasında bu hataları gizlemek istiyor gibi görünüyor. (Bkz. "Devel sitesinde
yararlılar

Yanıtlar:


29

Yol, Drupal 7'deki gibi, admin / settings / error-report konumunda gördüğünüz aynı sayfadaki gibi şimdi admin / config / development / logging konumunda.

ekran görüntüsü


1
Bazı nedenlerden dolayı, bunu yapamam. Kaydetme tıklatıldığında seçimim sıfırlanıyor. Bunu veritabanında elle değiştirebilmemin bir yolu var mı?
Niranjan N Raju

17

Önerildiği gibi Administration » Configuration » Development(at /admin/config/development/logging) ' da hata mesajlarının görüntülenmesini devre dışı bırakma ayarını bulabilirsiniz , ancak hata / bildirimleri tamamen devre dışı bırakmaz.

Bunun nedeni, Drupal 7'nin E_ALL'ı zorlamasıdır, bu nedenle hala sistem günlüğüne yazılır ve bunları web sitenizin performansını etkileyen Son günlüklerde görebilirsiniz .

Bildirimleri tamamen devre dışı bırakmak için, aşağıdaki satırı bilgisayarınıza settings.phpveya php.inidosyaya eklemeniz gerekir :

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

Bildirimler ve kodlama standardı uyarıları dışında tüm hataları gösterin.

Tavsiye edilmeyen tüm PHP hatalarını susturmak için, ayarlar dosyanızı eklemeyi deneyebilirsiniz:

error_reporting(0); // Disable all errors.

Görmek: error_reporting()


Kayıt için Sorumlu Drupal 7 çekirdek kodu E_ALL(dosya:) includes/bootstrap.inc:

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

Ayrıca bakınız:


4

Kimsenin bilmesi için faydalı olabileceğinden bahsetmeyen bir şey Drupal 7'nin tüm yerel sistem hata raporlama seviyelerini görmezden gelmesidir. Drupal'da php hata raporlama seviyelerini ayarlamak için .htaccess veya php.ini dosyasını kullanamazsınız.

Bunun için D8'de önerilen bir yama var, ancak şu anda D7'de belirtilen kiamlaluno'da belirtilen 3 sayfadaki tüm hata maskeleriyle (tümü, hiçbiri veya hatalar ve uyarılarla) sınırlısınız.


3

Ayarlar her zaman admin / config / development / logging :) 'dedir.


Çok teşekkürler! Hala yeşil bildirimlerin canlı olmasını istiyorum. Umarım kaybolmazlar.
drupal_stuff_alter 14:11

2

Drush yönteminin neden bu kadar belgelenmemiş olduğundan emin değilim, ancak derleme betiğimde var:

drush vset error_level 0

... hata mesajlarını günlüğe kaydeder ancak ekranda göstermez.


1

Yukarıda belirtilen çözüm kenorb için tırnak eklemeniz gerekebilir:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');

Bu yanlış - bunlar sabittir, alıntı yapılmamalıdır. error_reporting, birlikte ORed tamsayı sabitlerinden oluşan bir tamsayı değeridir. Burada olduğu gibi sabit isimlerden oluşan bir dize ayarı değildir.
datashaman

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.