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.