PHP, hataları bir takım iç hata koşuluna karşılık olarak raporlar. Bu hatalar, farklı koşullarda bir işaretçi olarak kullanılabilir ve ihtiyaca göre gösterilip / günlüklenebilir.
PHP tarafından oluşturulan her hata bir türe sahiptir. Bu hata türlerinin bir listesi, hangi durumlarda karşılaşılacağı ve davranışın kısa bir açıklaması ile birlikte mevcuttur.
Eğer hiçbir hata işleyici belirlenmemişse, PHP hataları yapılandırmasına
bağlı olarak işleyecektir. Hangi hataların raporlandığı ve hangilerinin
gözardı edildiği error_reporting
adlı php.ini yönergesi ile kontrol edilir ya da işleyiş sürecinde
error_reporting() işlevi çağırılır. Bununla birlikte,
bazı hatalar betiğiniz çalıştırılmaya başlanmadan meydana gelebildiğinden,
yapılandırma yönergelerinin ayarlanması şiddetle tavsiye edilir.
Bir geliştirme ortamında, PHP tarafından üretilen sorunları fark etmeniz ve
çözmeniz gerektiğinden, error_reporting
yönergesini daima E_ALL
olarak yapılandırmalısınız.
Üretimde ise hata seviyelerini, E_ALL & ~E_NOTICE &
~E_DEPRECATED
gibi daha ayrıntılı ayarlamak isteyebilirsiniz.
Ancak bir çok durumda olası sorunlar hakkında erken uyarı sağlayabileceği
için E_ALL
daha uygundur.
PHP'nin bu hatalarla ne yapacağı az sonra değineceğimiz iki php.ini
yönergesine bağlıdır. display_errors
hatanın betik çıktısının bir parçası olarak gösterilip gösterilmeyeceğini
denetler. Hata veritabanı parolaları gibi hassas bilgiler
içerebileceğinden, üretim ortamında bu ayar her zaman etkisiz kılınmış
olmalıdır. Ancak geliştirme ortamında, hataların anında raporlandığından
emin olabilmek için etkin hale getirmek çoğu zaman kullanışlı olacaktır.
Hataların gösterilmesine ek olarak, PHP
log_errors
yönergesi etkinleştirildiğinde hataları günlükleyebilir. Bu tüm hataları
error_log
ile
belirlenen bir dosyaya ya da sistem raporlama aracına günlükleyecektir.
Hataları günlükleyebildiğiniz ve daha sonra bu hataları temel alarak
raporlama yapabileceğiniz için bu yönerge üretim ortamlarında ziyadesiyle
kullanışlı olabilir.
Eğer PHP'nin öntanımlı hata işleyicileri yetersizse, bir çok hata türünü kendi hata işleyicilerinizle set_error_handler() yönergesini kurarak işleyebilirsiniz. Bazı hata türleri bu şekilde işlenemese de, işlenebilen hatalar betiğinizin uygun gördüğü şekilde işlenebilecektir. Örneğin, bu özelleştirilmiş bir hata sayfasının kullanıcıya gösterilmesi ve daha sonra ayrıntılı bilginin e-posta aracılığı ile günlüklenmesi olabilir.