Ayar error_reporting ötesinde hataları baskılayıcı (belki display_errors?)

2 Cevap php

En temelde üretim hataları çok olan bir live sitesi devralmasını ediyorum diyelim, ben temelde bir ay kadar sürebilir, bu entire sitenin bir recode yapıyorum.

Bu site harici xml dosyası var artık hangi beslemeleri üzerine güvenen, ama kodu düzgün bir güzel temiz hata mesajı (çeşitli benzer durumlar vardır) tedarik kurulum değildi bazı durumlar vardır - müşteri isteğinde de olduğunu azından bu hata mesajları, örneğin xml dosyasından içerik yüzden biz (yani sayfanın geri kalanı "ince" bakabilirsiniz) sayfasında php hataları ve boş bir bölge görmek olmaz yayınlanan olmasa bile gitmek.

Bir noktada ben extreme değil, bazı durumlarda geçersiz set_error_handler kullanan birinden duymuş ve ben log veya e-posta onları (ve / deneyin bir dosyada saklamak hata iletileri için kurma fikri vardı ) yinelenen hata iletileri yok temelde böylece son kullanıcılar bu çirkin şeyleri görmek zorunda değilsiniz.

Ben aslında bu bitti kimseden, önceden çok teşekkürler ipuçları arıyorum.

2 Cevap

Geliştirme, kullanmak için iyi zaman

error_reporting(E_ALL);
ini_set('display_errors', 'On');

Yani anında hataları görebilirsiniz: onları düzeltme olur.


When on the production server, you don't want error displayed, so :

ini_set('display_errors', 'Off');

error_reporting aktif kalabilir: display_errors Kapalı ise, hatalar zaten görüntülenir olmayacak - ama hala onları bir dosyaya kaydedilir olabilir.


BTW, those can be set in the php.ini file, of course :


On the production machine, you might want to use
log_errors and error_log, so errors are logged to a file (which means you will be able to know what errors occured -- can be useful, sometimes) ; of course, don't forget to check that file from time to time ;-).


As a sidenote, if you just have a couple functions/methods you don't want to display errors, you could envisage using the @ operator to just mask the errors those might trigger...

Ama ... Ben kuvvetle (çok özel durumlar hariç) buna karşı tavsiye: bu çok zor hata ayıklama yapmak: hataları bile geliştirme makine üzerinde, orada görüntülenir asla tetikledi!

Bence, sadece display_errors üretim makine üzerinde devre dışı bırakmak için bir yol daha iyidir; aynı zamanda kullanıcılar için daha iyi olduğu, herhangi bir hata tüm gösterilir olacak demektir!

Üretim sunucuda, aşağıdaki ini ayarlara sahip olmalıdır:

ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('log_errors', true);
ini_set('error_log', '/tmp/php_errors.log'); // or whatever file is appropriate
ini_set('display_errors', false);

display_errors kapatarak, kullanıcıların başka bir hata mesajı görmek asla, ama you günlük dosyasına bakarak hata mesajları görmek mümkün olacak.

Yeniden kod bittiğinde, (hepsini çözdüm çünkü) günlük dosyasına girmeden daha fazla hata olmamalıdır.

Edit: Bazı geliştiriciler error_reporting hatalarını gizleme bir yolu olarak E_ALL ^ E_NOTICE ayarlanır. Mümkün programlama hatalarla ilgili iletiler gizler çünkü bu yanlış bir uygulamadır. Tüm bunları düzeltmek için mümkün olan eski kod gelen pek çok Girmiş varken, only E_ALL ^ E_NOTICE kullanmalısınız.