- Konu sahibi
- #1
PHP hatası nedir?
PHP hatası, PHP kodu çalıştırılırken oluşan ve programın beklenmeyen biçimde durmasına, uyarı vermesine veya yanlış sonuç üretmesine yol açan durumdur. Hatanın türü ve mesajı; sorunun sözdiziminde mi, kullanılan veride mi, dosya yolunda mı yoksa çalışma ortamında mı olduğunu anlamaya yardımcı olur. Ayrıntıları geliştirme ortamında veya yetkili hata günlüğünde okuyup ilgili dosya ve satırdan başlayın; canlı sitede teknik ayrıntıları ziyaretçiye göstermeyin.PHP hata türleri nasıl çalışır?
PHP hataları aynı sonucu doğurmaz. Bazıları çalışmayı durdurur, bazıları yalnızca uyarı verir, bazıları ise kodun çalışmasına rağmen yanlış sonuç üretmesine neden olur.- Parse error: Kod PHP tarafından ayrıştırılamaz. Eksik noktalı virgül, kapatılmamış parantez veya tırnak gibi sözdizimi sorunları buna örnektir. Kod genellikle çalışmaya başlamadan durur.
- Fatal error: Çalışmanın devam edemeyeceği ciddi bir hatadır. Var olmayan bir sınıfı veya fonksiyonu çağırmak örnek olabilir.
- Warning: PHP bir sorun tespit eder ancak çoğu durumda çalışmayı sürdürebilir. Var olmayan bir dosyayı okumaya çalışmak buna örnektir.
- Notice ve diğer bildirimler: Hata düzeyi sorunun türüne ve PHP sürümüne bağlıdır. Örneğin tanımsız değişkene erişmek PHP 8 ve sonrasında warning, daha eski sürümlerde notice üretir; her bildirimi notice diye sınıflandırmayın.
- TypeError: Parametre, dönüş değeri veya sınıf özelliği bildirilen türle uyuşmadığında oluşabilir. Örneğin dizi bekleyen bir fonksiyona metin verilmesi.
- Mantık hatası: PHP kodu hata vermeden çalışır fakat yanlış sonuç üretir. Yanlış koşul, hatalı hesap veya yanlış değişken kullanımı bu gruba girer.
Bir hata mesajında genellikle hata türü, açıklama, dosya yolu ve satır numarası bulunur. Satır numarası her zaman hatanın gerçek kaynağı olmayabilir; özellikle eksik parantez veya tırnak gibi sözdizimi hatalarında sorun birkaç satır önce başlamış olabilir.
Somut örnek
Aşağıdaki kurgu örnektead adlı bir sabit tanımlanmamıştır; değişkeni okumak istenirken dolar işareti unutulmuştur:
Kod:
<?php
$ad = "Ayşe";
echo ad;
PHP 8 ve sonrasında
echo ad;, tanımsız sabit nedeniyle Error oluşturur. Eski sürümlerin metne dönüştürme davranışına güvenilmemelidir. Tanımlanmış değişkeni okumak için doğru kullanım şöyledir:
Kod:
<?php
$ad = "Ayşe";
echo $ad;
Beklenen çıktı
Ayşe olur. Aynı ekranda farklı bir hata görüyorsanız önce hata mesajındaki dosya ve satırı kontrol edin; daha sonra kullanılan değişkenin gerçekten tanımlanıp tanımlanmadığını inceleyin.Hata türünü ayırt etmek, sonraki adımı seçmeyi kolaylaştırır:
| Belirti | Muhtemel neden | İlk kontrol |
|---|---|---|
| Kod hiç çalışmıyor | Sözdizimi veya kritik çalışma hatası | Hata mesajı, dosya ve satır |
| Uyarı verip devam ediyor | Dosya, dizi anahtarı veya kaynak eksik | İlgili değerin varlığını test etmek |
| Yanlış sonuç üretiyor | Mantık veya veri dönüştürme hatası | Girdi, koşul ve ara değerler |
| Yalnız bazı ortamlarda oluşuyor | PHP sürümü veya yapılandırma farkı | Çalışma ortamlarını karşılaştırmak |
Bir PHP hatası nasıl incelenir?
- Hata mesajını eksiksiz okuyun. Hata türünü, dosya adını ve satır numarasını not edin. Yalnızca ekrandaki son cümleye bakmak, asıl nedeni kaçırabilir.
- Belirtilen satırı ve hemen önceki birkaç satırı inceleyin. Parantez, köşeli parantez, tırnak ve noktalı virgül çiftlerinin tamamlandığını kontrol edin.
- Değişkenlerin beklenen değeri taşıyıp taşımadığını kontrol edin. Yalnızca yerel veya erişimi kısıtlı geliştirme ortamında
var_dump($degisken);kullanabilirsiniz; değer ve türü gösterir. Oturum, parola veya kişisel veri içeren değerleri herkese açık çıktıya ya da günlüğe dökmeyin. - Dosya, sınıf, fonksiyon veya dizi anahtarının gerçekten mevcut olduğunu doğrulayın. Dosya yolu kullanılıyorsa göreli yolun hangi çalışma dizinine göre değerlendirildiğini kontrol edin.
- Hatanın düzeltildiğini küçük bir testle doğrulayın. Testten sonra geçici hata ayıklama çıktısını kaldırın ve kullanıcıya teknik hata ayrıntılarını göstermeyen uygun bir hata işleme yaklaşımı kullanın.
Bir hatayı bastırmak için her yerde
@ operatörünü kullanmak çözüm değildir; gerçek nedeni gizleyebilir ve teşhisi zorlaştırabilir. Benzer şekilde, yalnızca hata gösterimini kapatmak hatayı ortadan kaldırmaz. Geliştirme sırasında hatanın kayda alınması veya kontrollü biçimde gösterilmesi, canlı ortamda ise ayrıntıların kullanıcıya sızmaması gerekir.Sık yapılan hatalar
En yaygın sorunlardan biri, hata mesajını okumadan rastgele satırları değiştirmektir. Önce mesajdaki dosya ve satırdan başlanmalı, sonra çağrı zinciri ve kullanılan veriler incelenmelidir. Bir diğer hata,
isset veya benzeri kontrolleri her durumda rastgele eklemektir. Bu, eksik verinin neden oluştuğunu gizleyebilir; eksik veri beklenen bir durumsa açık bir varsayılan değer veya doğrulama kuralı belirlenmelidir.Ayrıca geliştirme ve canlı ortamın PHP sürümü, etkin eklentileri veya yapılandırması farklıysa aynı kod farklı davranabilir. Bu nedenle yalnızca tek ortamda düzeldiği görülen bir sorunun diğer ortamda da doğrulanması gerekir.
Sık sorulan sorular
Sözdizimi kontrolünden geçen dosyada yine hata olabilir mi?
Evet.
php -l dosya.php dosyayı çalıştırmadan sözdizimini denetler. Tanımsız fonksiyon, bağlantı sorunu veya yanlış hesap gibi yürütme gerektiren sorunları kanıtlamaz. Örnekteki tanımsız sabit de yalnızca sözdizimi kontrolüyle güvenli sayılmaz; ilgili akışı kontrollü ortamda çalıştırmak gerekir.Hata çıktısı bir API yanıtını da bozabilir mi?
Evet. JSON beklenen yanıta bir warning metni veya hata sayfası eklenirse istemci yanıtı ayrıştıramayabilir. Canlı API’de ayrıntıyı korunan günlüğe yazıp uygun durum kodu ve tanımlı yanıt biçimi döndürün; teşhis çıktısını yanıt gövdesine karıştırmayın.