Php Hata Yönetimi

Suskun

Kıdemli Üye
23 Ocak 2012
2,766
680
Germany
giphy.gif


Selamlar;
Bugün ki konumda sizlere PHP'de alınan hataları tamamen gizlemek veya belirlediğimiz bir kısmını görünür hale getirmeyi göstereceğim,


7z0AWK.png


Php Hata Yönetimi başlıkları;

• Hataları Göstermek
• Hata Yönetimi

7z0AWK.png


Php açıklanan bir dil olduğu için debug yapmak derlenen dillere göre biraz daha kolaydır. Hata İdaresi bizim bir hayli işimizi kolaylaştırır. Sözgelimi sistem test2 halindeyken hataları loglayabilir, veya bu hataları mail olarak göndertebiliriz. Php nin güzel tarafı hataları istersek tamamiyle gizleyebilir veya belirli düzeydeki hataları yalnızca açabiliriz.

7z0AWK.png


php-1.jpg


Hataları Göstermek

Phpde hataları istersek tamamiyle görünmez veya belirlediğimiz bölümünü görünür hale getirebiliriz. Php.ini dosyamızda display_errors ve display_startup_errors olarak iki tane temel hata ayıklama parametresi vardır bu parametreleri açarak tüm sunucuda hataları gösterebiliriz. Çoklukla tüm sunucuda hataları göstermek istemeyiz yalnızca çalıştığımız sayfayı debug etmek isteriz, bu yüzden sadece çalıştığımız sayfada bu hataları açmak için ini_set() işlevini kullanarak bu değerleri değiştirebiliriz.

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

Artık tüm hataları gösterilebilir hale getirdik. Şimdi error_reporting() işlevini kullanarak hangi hataları görmek istediğimizi belirleyelim. error_reporting işlevine ait bir hayli parametre var bunları aşağıdaki verdiğim listede görebilirsiniz.

Hatalar;

E_ERROR [Değeri;1]
Ölümcül çalışma hatıra hataları. Hafıza ayırma meselesi gibi giderilemeyen hatalar bu sınıfa girer. Böyle hatalar betiğin çalışmasının durmasına yol açar.

E_WARNING [Değeri;2]
Çalışma hatıra ikazları (ölümcül olmayan hatalar). Betiğin çalışması durmaz.

E_PARSE [Değeri;4]
Derleme hatıra analiz etme hataları. Analiz etme hatalarını yalnızca analiz edici üretir.

E_NOTICE [Değeri;8]
Çalışma hatıra bildirimleri. Betikte bir hataya neden olabilecek ancak betiğin normal çalışmasını sırasında oluşmayabilecek bir şeylerin tespit ettiğini belirtir.

E_CORE_ERROR [Değeri;16]
PHP'nin başlatılması esnasında oluşan ölümcül hatalar. PHP çekirdeği tarafından üretilmesi dışında E_ERROR gibidir.

E_CORE_WARNING [Değeri;32]
PHP'nin başlatılması esnasında oluşan ikazlar (ölümcül olmayan hatalar). PHP çekirdeği tarafından üretilmesi dışında E_WARNING gibidir.

E_COMPILE_ERROR [Değeri;64]
Ölümcül derleme hatıra hataları. Zend betik motoru tarafından üretilmesi dışında E_ERROR gibidir.

E_COMPILE_WARNING [Değeri;128]
Derleme hatıra ikazları (ölümcül olmayan hatalar). Zend betik motoru tarafından üretilmesi dışında E_WARNING gibidir.

E_USER_ERROR [Değeri;256]
Kullanıcı üretimi hata iletileri. PHP işlevi trigger_error() tarafından PHP kodunda üretilmesi dışında E_ERROR gibidir.

E_USER_WARNING [Değeri;512]
Kullanıcı üretimi uyarı iletileri. PHP işlevi trigger_error() tarafından PHP kodunda üretilmesi dışında E_WARNING gibidir.

E_USER_NOTICE [Değeri;1024]
Kullanıcı imalatı bildirim mesajları. PHP işlevi trigger_error() tarafından PHP kodunda üretilmesi dışında E_NOTICE gibidir.

E_STRICT [Değeri;2048]
Yazdığınızı PHP kodunun ileriye dönük uyumluluğunu ve beraber çalışabilirliğini en iyilemek emeliyle PHP tarafından yapılan teklifleri etkin kılar.

E_RECOVERABLE_ERROR [Değeri;4096]
Yakalanabilir ölümcül hata. Tehlikeli olma ihtimali bulunan bir hata oluştuğunu ancak açıklayıcıyı kararsız vaziyette bırakmadığını belirtir. Hata, kullanıcı tarafından bir eylemci tanımlanarak yakalanmadığı (set_error_handler() işlevine bakınız) takdirde betik E_ERROR hatasıyla sonlanır.

E_DEPRECATED [Değeri;8192]
Çalışma hatıra bildirimleri. Gelecek sürümlerle çalışmayacak kodlar hakkındaki ikazları etkin kılar.

E_USER_DEPRECATED [Değeri;16384]
Kullanıcı imalatı "kullanımı önerilmiyor" bildirimleri. PHP işlevi trigger_error() tarafından PHP kodunda üretilmesi dışında E_DEPRECATED gibidir.

E_ALL [Değeri;32767]
Desteklenen (PHP 5.4.0 öncesinde E_STRICT dışında kalan) tüm hatalar ve ikazlar.

Kullanımı,

// E_NOTICE hariç bütün hataları göster
error_reporting(E_ALL ^ E_NOTICE);

// Tüm PHP hatalarını göster
error_reporting(E_ALL);

Örneğin;

error_reporting(E_ALL);
echo $a; // tanımlı olmayan bir değişkeni ekrana yazdırmaya çalışalım.

// hata çıktısı
// Notice: Undefined variable: a in index.php on line 3

Hatanın nerde ve neden kaynaklandığını, hatanın türünü görmüş oluyoruz.

Hata Yönetimi

Hataları yönetmek için try catch bloğunu kullanırız. Hatayı önce biz fırlatırız throw new Exception() daha sonra fırlattığımız hatayı yeniden biz yakalarız. Örnek üzerinden gidersek dahada anlaşılır olacaktır.

Olabilecek hatalar;
•yaş değişkeni tanımlı olmayabilir
•yaş değeri numeric olmayabilir
•yaş sıfıra eşit veya küçük olabilir

Bu üç hatadan biri varsa sistem ilerleyemez bizde bu 3 hatayı kontrol edip şayet bunlardan biri gerçekleşmişse bir hata fırlatacağız ve bu hatayı kendimiz bulacaz.

//$yas = 0;
//$yas = "vehbi";
// $yas = 18;
try{
if(!isset($yas)) {
throw new Exception("Yaş Tanımlı Değil");
}else if(!is_numeric($yas)) {
throw new Exception("Yaş numeric bir değer olmalıdır.");
}else if($yas <= 0) {
throw new Exception("Yaş 0 dan büyük olmalıdır.");
}else {
echo $yas >18 ? "18 Yaşından Büyük" : "18 Yaşından Büyük Değil!";
}

}catch(Exception $e) {
// hata varsa catch bloğu çalışır ve hata yakalanır.
echo $e->getMessage();

}

Örnekteki izah satırı halindeki $matem değişkenlerini sırayla açarak hataları sizde görebilirsiniz. En son $yas = 18 bölümünü açtığınızda try bloğunun başarılı bir şekilde çalıştığını görebilirsiniz.

7z0AWK.png


konu burda bitmiştir, başka bir konuda görüşmek üzere ve okuyan herkese teşekkürlerimi sunarım.

7z0AWK.png


CckryH.gif
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.