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.

Latest comments