PHP’de hataları görüntülemenin dört farklı yolu
PHP’de hataları yönetme ve kaydetme ayrıntılarına dalmadan önce, PHP’de hataları görüntülemenin dört ana yolunu ana hatlarıyla açıklayalım:- error_reporting: Bu işlev, geliştiricilerin PHP’nin hangi hataları önereceğini belirlemesine olanak tanır. E_NOTICE ve E_STRICT gibi bazı istisnalar dışında tüm hataları, uyarıları ve bildirimleri görüntüleyecek şekilde ayarlanabilir.
- display_errors: Bu, php.ini dosyasında bulunan ve hataların çıktının bir parçası olarak ekrana yazdırılıp yazdırılmayacağını veya gizlenip gizlenmeyeceğini belirleyen bir yönergedir.
- log_errors: Bu yönerge, PHP’ye hataları kaydedip kaydetmeyeceğini söyler. “Açık” olarak ayarlanırsa, error_log yönergesinde ayarlanan değerlere göre hatalar kaydedilir.
- error_log dizesi: Bu yönerge, hata mesajının nereye gönderileceğini belirler. Sunucunun hata günlüğüne, bir TCP bağlantı noktasına veya yönergede belirtilen ayrı bir dosyaya gönderilebilir.
- error_reporting(E_DEPRECATED): PHP 8.x’te error_reporting(E_ALL) kullanımı artık E_DEPRECATED hatalarını da içeriyor. Bu hatalar, gelecekteki PHP sürümlerinde kaldırılacak kullanım dışı özellikler hakkında uyarı veriyor. Bu, kodunuzun geleceğe hazır olması için çok önemli.
- display_errors = stderr : PHP 8.x’te artık display_errors’ı stderr olarak ayarlayabilirsiniz. Bu, hata çıktısını tarayıcı yerine standart hata akışına yönlendirir; bu da CLI uygulamalarında kullanışlıdır.
Tüm PHP Hatalarını Hızlıca Göster
Tüm PHP hatalarını ve uyarılarını görüntülemenin en hızlı yolu PHP kod dosyanıza şu satırları eklemektir:ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Bu Kod Satırları Tam Olarak Ne İşe Yarar?
ini_set fonksiyonu PHP ini dosyanızda bulunan yapılandırmayı geçersiz kılmaya çalışacaktır. display_errors ve display_startup_errors, mevcut yönergelerden sadece ikisidir. display_errors yönergesi, hataların kullanıcıdan görüntülenip görüntülenmeyeceğini belirler. Genellikle, dispay_errors yönergesi geliştirme sonrasında kapatılmalıdır. Ancak display_startup_errors ayrı bir yönergedir çünkü display_errors, PHP’nin başlatma dizisi sırasında karşılaşılacak hataları işlemez. ini_set işlevi tarafından geçersiz kılınabilen yönergelerin listesi resmi belgelerde bulunabilir . Ne yazık ki, bu iki yönerge eksik noktalı virgül veya eksik süslü parantez gibi ayrıştırma hatalarını görüntüleyemeyecektir . Bu durumda, PHP ini yapılandırmasının değiştirilmesi gerekir.PHP.ini’yi tüm hataları görüntüleyecek şekilde yapılandırın
Eğer PHP kodlarından bazılarını eklemenize rağmen test sırasında tarayıcıda hata oluşmuyorsa, PHP ini yapılandırmasının bunu ele almak için bazı ek yönergeleri vardır.display_errors = onPHP ini dosyasında display_errors yönergesi “on” olarak ayarlanmalıdır. Bu, PHP kodunda ini_set işlevini çağırarak görüntülenemeyen sözdizimi veya ayrıştırma hataları da dahil olmak üzere tüm hataları görüntüler. PHP ini dosyası, phpinfo() işlevinin görüntülenen çıktısında bulunur ve “yüklenen yapılandırma dosyası” olarak etiketlenir. Web uygulaması üretim aşamasındaysa, ini yapılandırmasındaki bu yönerge “off” olarak ayarlanmalıdır.
PHP hatalarını .htaccess yapılandırması aracılığıyla görüntüleyin
Geliştiriciler genellikle dizin dosyalarına erişebilir. PHP hatalarını gösterme yönergesi, projenin kök veya genel dizininde bulunan .htaccess dosyası kullanılarak da etkinleştirilebilir veya devre dışı bırakılabilir.php_flag display_startup_errors on php_flag display_errors onPHP hatalarını göstermek için PHP koduna eklenecek olana benzer şekilde, .htaccess de display_startup_errors ve display_errors yönergelerine sahiptir. Hata mesajlarını bu şekilde göstermenin veya devre dışı bırakmanın avantajı, geliştirme ve üretimin farklı .htaccess dosyalarına sahip olabilmesi ve üretimin hataların görüntülenmesini engellemesidir. Hangi dosyalara erişiminiz olduğuna ve dağıtımları ve sunucu yapılandırmalarını nasıl yaptığınıza bağlı olarak, .htaccess’te veya PHP.ini dosyanızda display_errors’ı yapılandırmak isteyebilirsiniz. Birçok barındırma sağlayıcısı, PHP.ini dosyanızı display_errors’ı etkinleştirecek şekilde değiştirmenize izin vermez. .htaccess dosyasında, günlük klasörü veya günlük dosyası web sunucusu tarafından yazılabilir olduğu sürece özel bir hata günlüğü de etkinleştirilebilir. Günlük dosyası, .htaccess’in bulunduğu yere göreli bir yol veya /var/www/html/website/public/logs gibi mutlak bir yol olabilir.
php_value error_log logs/all_errors.log
Ayrıntılı uyarıları ve bildirimleri etkinleştirin
Bazen, başlangıçta uygulamayı etkilemiyor gibi görünen uyarılar, belirli koşullarda ölümcül hatalara yol açabilir. Bu uyarıların düzeltilmesi gerekir çünkü bu, uygulamanın belirli senaryolarda normal şekilde çalışmayacağı anlamına gelir. Bu uyarılar çok sayıda hataya neden oluyorsa, hataları gizlemek ve yalnızca uyarı mesajlarını göstermek daha pratik olacaktır.error_reporting(E_WARNING);Bir geliştirici için uyarıları göstermek ve hataları gizlemek, tek bir satır kod eklemek kadar kolaydır. Uyarıları ve bildirimleri göstermek için, hata raporlama işlevinin parametresi “E_WARNING | E_NOTICE” olacaktır. error_reporting işlevi, bitsel operatörler olarak E_ERROR, E_WARNING, E_PARSE ve E_NOTICE parametrelerini kabul edebilir. Bildirimler hariç tüm hataları raporlamak için parametre “E_ALL & ~E_NOTICE” olur; burada E_ALL, error_reporting işlevinin tüm olası parametrelerini ifade eder.
error_reporting() fonksiyonuyla ilgili derinlemesine bilgi
Hata raporlama işlevi, geliştiricilerin uygulamada hangi hataların ve kaç hatanın gösterileceğini kontrol etmelerini sağlayan yerleşik bir PHP işlevidir. PHP ini yapılandırmasında, çalışma zamanında bu işlev tarafından ayarlanacak bir error_reporting yönergesi olduğunu unutmayın.error_reporting(0);Tüm hataları, uyarıları, ayrıştırma iletilerini ve bildirimleri kaldırmak için error_reporting işlevine aktarılması gereken parametre sıfırdır. Bu kod satırını her PHP dosyasında bulundurmak pratik olmayacaktır. PHP ini dosyasında veya .htaccess dosyasında rapor iletilerini kapatmak daha iyi olacaktır.
error_reporting(E_NOTICE);PHP, değişkenlerin bildirilmemiş olsalar bile kullanılmasına izin verir. Bu standart bir uygulama değildir, çünkü bildirilmemiş değişkenler döngülerde ve koşullarda kullanıldığında uygulamada sorunlara yol açar. Bazen bu durum, bildirilen değişkenin, koşullar veya döngüler için kullanılan değişkenden farklı bir yazımına sahip olması nedeniyle de meydana gelir. error_reporting fonksiyonuna E_NOTICE iletilirse, bu bildirilmemiş değişkenler web uygulamasında görüntülenir.
error_reporting(E_ALL & ~E_NOTICE);Hata raporlama işlevi, hangi hataların gösterilebileceğini filtrelemenize olanak tanır. “~” karakteri “değil” veya “hayır” anlamına gelir, bu nedenle ~E_NOTICE parametresi bildirimlerin gösterilmeyeceği anlamına gelir. Olası parametreler arasındaki “&” ve “|” karakterlerine dikkat edin. “&” karakteri “tümü için doğru” anlamına gelirken, “|” karakteri doğru olduğu sürece bunlardan birini temsil eder. Bu iki karakter, PHP koşullarında OR ve AND ile aynı anlama gelir.
error_reporting(E_ALL);
error_reporting(-1);
ini_set('error_reporting', E_ALL);
Bu üç satırlık kod aynı işlevi görür ve tüm PHP hatalarını gösterir. error_reporting(E_ALL), geliştiriciler arasında hata mesajlarını göstermek için en yaygın kullanılan yöntemdir çünkü daha okunaklı ve anlaşılırdır.
PHP 8.x ile uyumluluk için E_ALL | E_DEPRECATED kullanmayı düşünün.