PHP – Error Handling

PHP dilinde hata ayıklama yöntemleri gayet basit ve güvenlidir.”php.ini” dosyasındaki error handling ayarını “1” değerine dönüştürerek , proje dosyalarınızda bulunan hataları tarayıcınızdan izleyebilme imkanına sahipsiniz.Tarayınıcı bir nevi derleyici olarak kullanabilir ve hatalarını en kısa sürede düzenleme imkanına sahip olursunuz.

PHP Hata Ayıklama

Kod yazarken ve uygulama geliştirirken ,hataları takip ve düzenleme işlemleri çok önemlidir.Kodlarınız hatalı çalışıyor ise ,profesyonel anlamda size büyük bir kayıp olarak dönecektir,,ayrıca projenizin güvenliği çok büyük zarara uğrayacaktır.

Bu dersimizde PHP de hata ayıklama ve düzenleme yöntemleri hakkında yapılması gereken işlemleri göreceğiz.

Şimdi farklı hata ayıklama metodları görelim:

  • Basit “die()” koşulu
  • Özel hata ve hata tetikleyiciler
  • Hata gösterme


Basit Hata Ayıklama: die() fonksiyonu kullanma

İlk örneğimizde ,herhangi bir text dosyasını açan bir script yazalım:

<?php
$file=fopen(“herhangibirtextdosyasi.txt”,”r”);
?>

“herhangibirtextdosyasi.txt” dosyasi bulunamadığı takdirde tarayıcımızda aşağıdaki gibi bir hata görürüz:

Warning: fopen(herhangibirtextdosyasi.txt) [function.fopen]: failed to open stream:No such file or directory in C:\webfolder\test.php on line 2

Bu hatadan kurtulmak için , dosyanın varlığını kontrol etmemiz gerekiyor,aşağıdaki scriptimizi görelim:

<?phpif(!file_exists(“herhangibirtextdosyasi.txt”))

{

die(“Dosya bulunamadı”);

}

else

{

$file=fopen(“herhangibirtextdosyasi.txt”,”r”);

}

?>

Dosya bulunamadığı takdirde aşağıdaki gibi bir uyarı alınacaktır;

Dosya Bulunamadı

Bu örneğimizdeki kodun güvenilirliği ,önceki örneğimizden çok daha fazladır.Çünkü yapılacak işlemde hata basit bir hata ayıklama yöntemiyle beklenmeyen hatalardan kurtulduk.

Her nekadar basit yöntemimiz ile geçerlilik kazandırdıysak da,her zaman aynı şekilde hatalardan kurtuluşu sağlanamaz.Bunun için alternatif olacak özel bir hata ayıklama scriptimizi yazalım:


Özel Hata AyıklamaÖzel bir hata ayıklama metodumuzu çok basitce tasarlayabiliriz. Öncelikle fonksiyonun yapısını incelemekte fayda var;

error_function(error_level,error_message,error_file,error_line,error_context)

Parameter Description
error_level Gerekli. Kullanıcı tanımlı hataları özelleştirir.Değer olmalıdır. Must be a value number.
error_message Gerekli. Kullanıcı tanımlı hata mesajını belirler
error_file Gerekli.Hata oluşan dosyayı belirtir.
error_line Opsiyonel. Hatalı kod satırını işaret eder.
error_context Opsiyonel.Hatalı kod içeriğini belirler ve parçayı gösterir.

Hata Rapor Aşamaları

Kullanıcının tanımlarıyla belirli hatalar istenilen şekilde gösterilebilir ve isimlendirilebilir.

Değer Sabit Tanımı
2 E_WARNING Ölümcül hata değil. run-time hatası denir.
8 E_NOTICE Run-time notları. Script normal olarak çalışır ,hata olşturabilecek noktaları gösterir.
256 E_USER_ERROR Kullanıcı sebebli ölümcül hata. E_ERROR a benzer. trigger_error() yapılandırılmasıyla oluşur.
512 E_USER_WARNING Ölümcül hata değil. E_WARNING e benzer. trigger_error() yapılandırılmasıyla oluşur.
1024 E_USER_NOTICE E_NOTICE e benzer. trigger_error() yapılandırılmasıyla oluşan notlardır.
4096 E_RECOVERABLE_ERROR Yakalanabilir ölümcül hatadır. E_ERROR a benzer, kullanıcının tanımladığı ayıklamalar ile engellenebilir.
8191 E_ALL Bütün hata ve uyarıları gösterir.

Bir fonksiyon tanımlayarak hata ayıklamamızı gerçekleştirelim;

function customError($errno, $errstr){

echo “<b>Hata:</b> [$errno] $errstr<br />”;

echo “Script sonu”;

die();

}

Yukardaki kod, basit bir hata ayıklama fonksiyonudur.Tetiklendiği anda, hata seviyesini ve hata mesajını yakalar, ve tarayıcıya yayınlatır.

Hata ayıklamayı gerçekleştirdik,, şimdi işe hata ayıklamanın ne zaman tetikleneceğini belirlemek gerekiyor;


Hata Ayıklayıcı YapılandırmakDefault hata ayıklayıcısı yapısını inceledik. Şimdi ise kodu çalışma zamanının herhangi bir anında hata ayıklamayı tetiklenecek şekilde yeniden düzenleyelim;Hata ayıklamayı ,sadece belirl hatalarda tetiklenmesini gerçekleştirebiliriz, fakat bu örneğimiz bütün tanımlanmış hataları gösteren bir script yazacağız.

set_error_handler(“customError”);

Örnek

Örneğimizi inceleyim;

<?php//hata ayıklayıcı fonksiyon

function customError($errno, $errstr)

{

echo “<b>Hata:</b> [$errno] $errstr”;

}

//Hata ayıklayıcıyı yapılandır

set_error_handler(“customError”);

//hatayı tetikle

echo($test);

?>

Kodun çıktısı aşağıdaki gibi olacaktır.

Custom error: [8] Undefined variable: test


Hatayı tetiklemeBir script içinde kullanıcı girdileri olan bölümlerinde hata tetikleme çok gerekli olacaktır.PHP dilinde , bu işlemi trigger_error() fonksiyonu ile gerçekleştirebiliriz.ÖrnekBu örneğimizde “test” değişkeninin değeri 1 ve altında bir değerde olmazsa hata oluşacaktır; Görelim;

<?php$test=2;

if ($test>1)

{

trigger_error(“Değer 1 veya daha az olmalıdır”);

}

?>

Kodun çıktısı şu şekilde olacaktır.

Notice: Değer 1 veya daha az olmalıdırin C:\webfolder\test.php on line 6

Hata script içerisinde istenilen herhangi bir yerde tetiklenebilir, ve ikinci bir parametre eklenerek tetikleme işlemi özelleştirilebilir;

Muhtemel Hata Türleri;

  • E_USER_ERROR – Kullanıcı tanımlı işletim hatası. Kodun işletilmesi iptal edilir.
  • E_USER_WARNING – Kullanıcı tanımlı işletim sırasında oluşan hata.İşletim durdurulmaz
  • E_USER_NOTICE – Default. Kullanıcı tanımlı hata notu. Script hata oluşturabilir diye yorumlar fakat normal şekilde çalışmasına devam eder.

Örnek

Örneğimizde , “test” değişken değeri 1 den fazla olursa E_USER_WARNING meydana gelir. Hata oluşması durumunda E_USER_WARNING ile tanımladığımız notu script yayınlar:

<?php//hata ayıklayıcı fonksiyon

function customError($errno, $errstr)

{

echo “<b>Error:</b> [$errno] $errstr<br />”;

echo “Script sonu”;

die();

}

//hata ayıklayıcı fonksiyon yapılandırıldı

set_error_handler(“customError”,E_USER_WARNING);

//hatayı tetikle

$test=2;

if ($test>1)

{

trigger_error(“Değer 1 veya daha az olmalı”,E_USER_WARNING);

}

?>

Kodumuzun çıktısı şu şekilde olur.

Error: [512] Değer 1 veya daha az olmalı .Script sonu

Hata Bildirimi

Hata mesajlarını e-mail aracılığıyla rapor etmek en güvenli yoldur.

Hata Mesajı E-mail ile göndermek

Aşağıdaki örneğimizde tanımladığımız hata oluştuğu zaman hatanın e-mail ile bildirilmesini uyguluyoruz;

<?php//Hata ayıklayıcı fonksiyon

function customError($errno, $errstr)

{

echo “<b>Hata:</b> [$errno] $errstr<br />”;

echo “yöneticiye rapor edildi”;

error_log(“Hata: [$errno] $errstr”,1,

“birisi@kodadiweb.com”,”From: yonetici@kodadiweb.com”);

}

//hata ayıklayıcı kur

set_error_handler(“customError”,E_USER_WARNING);

//hata tetikle

$test=2;

if ($test>1)

{

trigger_error(“Değer 1 veya daha az olmalı”,E_USER_WARNING);

}

?>

The output of the code above should be something like this:

Error: [512] Değer 1 veya daha az olmalıYöneticiye rapor edildi

Aşağıdaki görünümde bir mail yönetici mail adresine gönderildi.

Error: [512] Değer 1 veya daha az olmalı

Bu yöntem tüm hatalar için kullanışlı olmayabilir.Kullanıcı tanımlı hatalarin bildirimi yönetilebilir ve mudahele edilebilir olduğu için uygundur.

One thought on “PHP – Error Handling

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir