Hizmetlerimiz hakkında bilgi almak için tıklayın.
Bir PHP uygulaması, yürütülmesi sırasında birçok farklı düzeyde uyarı ve hata üretebilir. Bu hataları görmek, hatalı çalışan bir uygulamada sorun giderirken geliştiriciler için çok önemlidir. Ancak çoğu geliştirici, PHP uygulamalarında hataları görüntülemede sıklıkla zorluklarla karşılaşır ve bu da sessiz uygulama hatalarına yol açar.
PHP'de hataları görüntülemenin önemini anlamak abartılamaz. Hata mesajları, PHP betiğini çalıştırırken ortaya çıkan sorunlar hakkında hayati bilgiler sağlar. Geliştiricilere kod yazarken yapılan hatalar olan sözdizimi hataları hakkında bilgi verirler. Ayrıca geliştiricilere, belirli programlama dillerinde önemli noktalama işaretleri olan eksik noktalı virgüller hakkında da bilgi verirler. Ayrıca, hata ayıklanması gereken daha karmaşık konulara dikkat çekerler. Bu sorunları belirlemek ve düzeltmek, gözle görülür hatalar olmadan karmaşık bir tahmin oyunu haline gelir.
PHP web uygulamalarının karmaşıklığı nedeniyle, hataları görüntülemek için birden fazla yöntem vardır ve her birinin özel kullanım durumunuza bağlı avantajları vardır.
PHP'de Hataları Görüntülemenin Dört Farklı Yolu
PHP'de hataları yönetme ve günlüğe kaydetmenin ayrıntılarına dalmadan önce, PHP'de hataları görüntülemenin dört ana yolunu özetleyelim:
- 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 gizlenmesi gerektiğini belirleyen bir yönergedir.
- log_errors:Bu yönerge PHP'ye hataları günlüğe kaydedip kaydetmeyeceğini söyler. “Açık” olarak ayarlanırsa, error_log yönergesinde ayarlanana göre hataları günlüğe kaydeder.
- error_log string:Bu yönerge hata mesajının nereye gönderilmesi gerektiğini belirler. Sunucunun hata günlüğüne, bir TCP bağlantı noktasına veya yönergede belirtilen ayrı bir dosyaya gönderilebilir.
Tüm PHP Hatalarını Göstermek
Tüm php hatalarını ve uyarılarını görüntülemenin en hızlı yolu şu satırları PHP kod dosyanıza eklemektir:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Bu yukarıda bulunan hata ayıklama kodunu PHP kodunuzun olduğu dosyaya eklediğinizde, hataları sayfanız üzerinde görüntüleyebilirsiniz.
Bu kodlar ne işe yarar?
ini_set
işlevi, PHP ini dosyanızda bulunan yapılandırmayı geçersiz kılmaya çalışacaktır.
display_errors
ve display_startup_errors
mevcut direktiflerden sadece ikisidir. display_errors
yönergesi, hataların kullanıcıdan görüntülenip görüntülenmeyeceğine karar verecektir. Genellikle geliştirme sonrasında dispay_errors
yönergesinin kapatılması gerekir.
Ancak display_startup_errors
ayrı bir yönergedir çünkü display_errors
PHP'nin başlatma sırasında karşılaşılacak hataları işlemez. ini_set
işlevi tarafından geçersiz kılınabilecek yönergelerin listesi resmi belgelerde bulunur.
Ne yazık ki, bu iki yönerge eksik noktalı virgül veya eksik küme parantezleri 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österecek Şekilde Yapılandırmak
Test sırasında bazı PHP kod hatalarının eklenmesi tarayıcıda görünmüyorsa, PHP ini yapılandırmasında bu durumu ele alacak bazı ek yönergeler bulunur.
display_errors = on
display_errors
yönergesi PHP ini dosyasında “on” olarak ayarlanmalıdır. Bu, PHP kodundaki ini_set
işlevi çağrıldığında 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 bulunabilir ve yüklenen yapılandırma dosyası olarak etiketlenir. Web uygulaması üretimdeyse,(geliştirme aşamasında değilse) ini yapılandırmasındaki bu yönergenin kapalı "off" olarak ayarlanması gerekir.
PHP Hatalarını .htaccess Yapılandırması Aracılığıyla Görüntülemek
Geliştiricilerin genellikle dizin dosyalarına erişimi vardır. PHP hatalarını göstermeye yönelik yönerge, projenin kök dizininde 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 on
PHP hatalarını göstermek için PHP koduna eklenecek olanlara benzer şekilde, .htaccess
'in de display_startup_errors
ve display_errors
için yönergeleri vardır. Hata mesajlarını bu şekilde göstermenin veya devre dışı bırakmanın avantajı, geliştirme ve üretimin farklı .htaccess
dosyalarına sahip olabilmesidir; burada üretim, hataların görüntülenmesini bastırır.
Hangi dosyalara erişebildiğinize 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. Pek ç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öreceli bir yol olabilir 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 Yönetmek
Bazen başlangıçta uygulamayı etkilemiyor gibi görünen uyarılar, belirli durumlarda ölümcül hatalara neden olabilir. Bu uyarıların düzeltilmesi gerekir çünkü bu, uygulamanın belirli senaryolarda normal şekilde çalışmayacağı anlamına gelir. Bu uyarıların çok fazla hataya neden olması durumunda hataları gizleyip sadece uyarı mesajlarının ne olduğunu göstermek daha pratik olacaktır.
error_reporting(E_WARNING);
Bir geliştirici için uyarıları göstermek ve hataları gizlemek, tek bir kod satırı eklemek kadar basittir. Uyarıları ve bildirimleri göstermek için hata raporlama fonksiyonunun parametresi “E_WARNING | E_NOTICE”. error_reporting
işlevi, E_ERROR, E_WARNING, E_PARSE ve E_NOTICE parametrelerini bitsel operatörler olarak kabul edebilir. Bildirimler dışındaki tüm hataları bildirmek için parametre “E_ALL & ~E_NOTICE” olur; burada E_ALL, error_reporting
fonksiyonunun tüm olası parametrelerini temsil eder.
error_reporting()
İşlevi
Hata raporlama işlevi, geliştiricilerin uygulamada hangi hataların ve kaç hatanın gösterileceğini kontrol etmesine olanak tanıyan yerleşik bir PHP işlevidir. Unutmayın, PHP ini yapılandırmasında çalışma zamanı sırasında bu işlev tarafından ayarlanacak bir error_reporting
yönergesi vardır.
error_reporting(0);
Yukarıda bulunan error_reporting(0);
kodu tüm hataları, uyarıları, ayrıştırma mesajlarını ve bildirimleri kaldırmak için error_reporting
işlevine iletilmesi gereken parametre sıfırdır. Bu kod satırının her PHP dosyasında bulunması pratik olmayacaktır. PHP ini dosyasındaki veya .htaccess
dosyasındaki rapor mesajlarını kapatmak daha iyi olacaktır.
error_reporting(E_NOTICE);
Yukarıda bulunan error_reporting(E_NOTICE);
kodu PHP değişkenlerin bildirilmediğinde 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 uygulama için sorunlara neden olacaktır. Bazen bu durum, bildirilen değişkenin, koşullar veya döngüler için kullanılan değişkenden farklı bir yazıma sahip olması nedeniyle de meydana gelir. error_reporting
fonksiyonunda E_NOTICE iletildiğinde bu bildirilmemiş değişkenler web uygulamasında görüntülenecektir.
error_reporting(E_ALL & ~E_NOTICE);
Yukarıda bulunan error_reporting(E_ALL & ~E_NOTICE);
kodu hata raporlama işlevi, hangi hataların gösterilebileceğini filtrelemenize olanak tanır. “~” karakteri “değil” veya “hayır” anlamına gelir; dolayısıyla ~E_NOTICE parametresi bildirimlerin gösterilmemesi anlamına gelir. “&” ve “|” işaretlerine dikkat edin olası parametreler arasındaki karakterler. “&” karakteri “herkes için doğru” anlamına gelirken, “|” karakter doğru olduğu sürece ikisini de temsil eder. Bu iki karakter PHP OR ve AND koşullarında aynı anlama sahiptir.
error_reporting(E_ALL);
error_reporting(-1);
ini_set('error_reporting', E_ALL);
Yukarıda bulunan bu üç kod satırı tamamen aynı şeyi yapar, tüm PHP hatalarını gösterir. error_reporting(E_ALL)
, daha okunaklı ve anlaşılır olduğundan geliştiriciler arasında hata mesajlarını göstermek için en yaygın kullanılanıdır.
error_log()
İşlevini Kullanarak PHP Hatalarını Bir Dosyaya kaydetmek
Üretim sırasında son kullanıcılara hata mesajları gösterilmemeli ancak bu bilgilerin yine de izleme amacıyla kaydedilmesi gerekmektedir. Bu hata mesajlarını bir üretim web uygulamasına kaydetmenin en iyi yolu, onu günlük dosyalarında saklamaktır.
Günlük dosyalarını kullanmanın kolay bir yolu, dört parametreyi kabul eden error_log
işlevini kullanmaktır. Gerekli olan tek parametre, hatayla veya neyin kaydedileceğiyle ilgili ayrıntıları içeren ilk parametredir. Tür, hedef ve başlığın tümü bu işlev için isteğe bağlı parametrelerdir.
error_log("Bir şeyler yanlış gitti!", 0);
Type parametresi, tanımlanmadıysa varsayılan olarak 0 olacaktır; bu, bu günlük bilgisinin, web sunucusunda tanımlanan günlük dosyasına ekleneceği anlamına gelir.
error_log("Bu hatayı birine e-postayla gönder!", 1, "support@adiniz.com");
Burada tip 1 parametresi, üçüncü parametrede belirtilen hata günlüğünü e-postayla gönderecektir. Bu özelliğin çalışması için, PHP ini'nin e-posta gönderebilmesi için uygun bir SMTP yapılandırmasına sahip olması gerekir. Bu SMTP ini yönergeleri ana bilgisayarı, şifreleme türünü, kullanıcı adını, parolayı ve bağlantı noktasını içerir. Bu tür hata raporlama, bulunur bulunmaz düzeltilmesi gereken hataların günlüğe kaydedilmesi veya bildirilmesi için tavsiye edilir.
error_log("Bu hatayı bir dosyaya yazın!", 3, "logs/error.log");
Mesajları web sunucusunun konfigürasyonu tarafından tanımlanan ayrı bir dosyaya kaydetmek için tip 3 kullanılmalıdır. Üçüncü parametre günlük dosyasının konumu olarak görev yapacak ve web sunucusu tarafından yazılabilir olmalıdır. Günlük dosyasının konumu, bu kodun çağrıldığı yere göreli bir yol veya mutlak bir yol olabilir.
Sunucu Yapılandırması Aracılığıyla PHP Hatalarını Günlüğe Kaydetmek
.htaccess
dosyasındaki parametreleri değiştirmekten veya hataları göstermek amacıyla PHP koduna bazı satırlar eklemekten kaçınmak için, hataları günlüğe kaydetmenin en iyi yolu, onu web sunucusu yapılandırma dosyasında tanımlamaktır.
ErrorLog "/var/log/apache2/web-error.log"
Apache için bu dosyaların belirli bir web sitesinin veya uygulamanın sanal ana bilgisayarına eklenmesi gerekir. Bu genellikle Ubuntu'nun kullanılabilir siteler klasöründe veya Windows'ta httpd-vhosts dosyasında bulunur.
error_log /var/log/nginx/web-error.log;
Apache'ye benzer şekilde nginx için direktifin adı error_log
'dur. Hem Apache hem de nginx web sunucuları için günlük dosyalarının web sunucusu tarafından yazılabilir olması gerekir.