Perşembe, 24 Haziran 2010

Hata Mesajlarının Yönetimi

 

Kodlama sırasında hataların ekrana yansıtılması programcılar için oldukça büyük kolaylık sağlar. Hatanın sebebinin bulunması ve düzeltilmesi için en önemli adım, hata mesajının doğru yorumlanmasıdır.

CodeIgniter`da çalışma sırasında hata mesajlarının ekrana yansıtılması amacıyla kök dizindeki index.php dosyasının içinde bulunan error_reporting() fonksiyonuna verilen değeri E_ALL olarak değiştirmek gerekir. Böylece program çalıştığında oluşan her türlü hata (uyarı, bilgi ve ölümcül hatalar) ekrana yansıtılacaktır.

Kodlama işlemi bittikten sonra program yayına geçmeden önce, olası saldırıları önlemek için yapılması gerekli en önemli adım, hata mesajlarının ekrana yazdırılmamasıdır. Hata mesajlarının görüntülenmesini engellemek istenirse, kök dizindeki index.php dosyasının içinde bulunan error_reporting() fonksiyonuna verilen değer 0 (sıfır) yapılmalıdır.

Ancak bu ayar ile veritabanında oluşan hataların ekrana yansıtılması önlenemez. Veritabanı hataları, art niyetli kişilerin siteye olası sızmalarına neden olabilecek detayda bilgi (veritabanı adı, tablo ve değişken adları vs.) içerebilir. Bu nedenle veritabanı hatalarının yayımdaki sitelerde ekrana bastırılmaması gereklidir. Bunu sağlamak amacıyla, application/config dizini altında bulunan database.php dosyasında aşağıdaki ayarın yapılması gereklidir :

$db['default']['db_debug'] = FALSE;

Böylece veritabanında oluşacak hatalar ekrana bastırılmayacaktır. Tüm hataların ekrana yazdırılması önlendikten sonra, hata takibi log dosyaları aracılığı ile yapılmalıdır. Bu amaçla application/config dizini altındaki config.php dosyasında aşağıdaki ayarın yapılması gereklidir:

$config['log_threshold'] = 1;

Bu değişken ile sadece ölümcül hata mesajları kayıt altına alınacaktır. Log dosyaları system/log dizini altına kayıt edildiğinden, bu klasöre yazma yetkisi (unix işletim sisteminde 0755) verilmesi gereklidir.

@03 Temmuz 2010: log_treshold değişkeni değeri "1" olarak düzeltilmiştir. İrfan'a uyarısı için teşekkürler.

Yorumlar

çok faydalı bir makale olmuş. çok faydalandım. teşekkür ederim. devamını bekliyoruz..

Fatal Errorları nasıl kayıt edebiliyor anlamış değilim. Anlamamın sebebi fatal error veren betik çalışmaz

@Uğur: MVC yapısında tek yönlü bir uygulama çalışması söz konusu olmadığından, "her Fatal error'da uygulama çalışmayacaktır" demek yanlıştır. O nedenle bazı uygulamalar çalışır, hatalar da kayıt edilir.

Çok faydalı bir makale, tebrik ederim.

Log ların kayıt altına alınabilmesi için log dizininin 777 özelliğine çekilmesi gerekli. 

Yorum Ekle