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.