Sık Karşılaşılan PHP Hataları ve Hızlı Çözümleri
20.07.2026 · 3 dk okuma · 1 okunma
PHP hataları, sanıldığından çok daha dar bir kümede toplanır. Aynı birkaç neden, farklı görünümlerle karşımıza çıkar. Bu yazıda en sık karşılaşılan durumları, nedenlerini ve kalıcı çözümlerini derledik.

1. Beyaz ekran (boş sayfa)
Sayfa açılır ama hiçbir şey yoktur. Bu, hatanın olmadığı anlamına gelmez; hatanın gösterilmediği anlamına gelir. Yapılacak ilk iş görünürlüğü sağlamaktır.
Geliştirme ortamında hata gösterimini açın; canlı ortamda ise asla açmayın, bunun yerine hata kayıt dosyasına bakın. Kayıt dosyası hatanın türünü, dosyasını ve satırını yazar. Bu bilgiye ulaştığınızda sorunun yarısı çözülmüştür.
Sık nedenler: sözdizimi hatası, bulunamayan sınıf veya dosya, bellek sınırının aşılması ve sonsuz döngü.
2. "Headers already sent"
Bu hata, HTTP başlığı gönderilmeye çalışıldığında ekrana zaten çıktı verilmiş olduğunu söyler. Yönlendirme, çerez ayarlama veya oturum başlatma işlemleri başlık gönderir; bunlardan önce tek bir boşluk bile yazdırılmışsa hata oluşur.
En sinsi nedeni, dosyanın PHP açılış etiketinden önceki görünmez boşluk veya kapanış etiketinden sonraki satır sonudur. Bu yüzden yalnızca PHP kodu içeren dosyalarda kapanış etiketi kullanılmaması önerilir.
3. Bellek sınırı aşıldı
Genellikle raporlama ve dışa aktarma işlemlerinde ortaya çıkar. Sınırı yükseltmek geçici bir yamadır; kayıt sayısı arttığında hata geri gelir.
Kalıcı çözüm, tüm kayıtları belleğe almamaktır. Büyük veri kümelerini parçalar hâlinde işleyin ve çıktıyı biriktirmek yerine doğrudan akış olarak gönderin. Aynı ilke dosya işlemlerinde de geçerlidir: 200 MB’lık bir dosyayı tek seferde okumak yerine satır satır işleyin.
4. Türkçe karakter bozulmaları
Soru işaretleri veya anlamsız karakterler, karakter seti zincirinin bir halkasının farklı olmasından kaynaklanır. Zincirin tamamı kontrol edilmelidir:
- Veritabanı ve tablo karakter seti: utf8mb4 (utf8 değil; emoji ve bazı karakterler için yetersizdir).
- Bağlantı karakter seti: uygulamadan veritabanına giden bağlantı da utf8mb4 olmalıdır.
- Sayfa çıktısı: UTF-8 olarak bildirilmelidir.
- Dosyaların kodlaması: BOM içermeyen UTF-8.
Ayrıca büyük-küçük harf dönüşümlerinde Türkçeye özgü tuzak vardır: "i" harfinin büyüğü İngilizce kurallarında "I" olur, Türkçede "İ". Karşılaştırma yaparken bu fark, eşleşmeyen kayıtlara yol açar.
5. Tanımsız değişken ve dizi anahtarı uyarıları
Yeni PHP sürümlerinde bu durumlar daha katı ele alınır. Formdan gelen bir alan gönderilmediğinde doğrudan erişmek uyarı üretir. Çözüm, varsayılan değerle erişim sağlayan operatörleri kullanmak ve gelen veriyi kullanmadan önce beklenen yapıda olduğunu doğrulamaktır.
Bu uyarılar bastırılmamalıdır; genellikle gerçek bir mantık hatasının ilk işaretidir.
6. Dosya yükleme çalışmıyor
Yükleme sessizce başarısız oluyorsa sırayla şunları kontrol edin: form kodlama tipi doğru mu, yüklenen dosya boyutu sunucu sınırlarını aşıyor mu, hedef klasör var mı ve yazma izni verilmiş mi, geçici dizin erişilebilir mi? Sunucu tarafındaki boyut sınırları iki ayrı ayarla kontrol edilir; yalnızca birini artırmak sorunu çözmez.
7. Oturum kayboluyor
Kullanıcı giriş yapıyor ama bir sonraki sayfada oturum düşüyorsa olası nedenler şunlardır: oturum dosyalarının yazılacağı dizinde izin sorunu, alan adının www’li ve www’siz sürümleri arasında geçiş, HTTPS ile HTTP karışımı veya çerez ayarlarının yanlış tanımlanması. Bu dördü, oturum sorunlarının neredeyse tamamını kapsar.
8. Zaman aşımı ve sonsuz bekleyen istekler
Dış bir servise istek atan kod, o servis yanıt vermediğinde sayfayı kilitler. Varsayılan ayarlarda bekleme süresi uzun olabilir ve kullanıcı boş ekrana bakar.
Kural olarak, dışarıya giden her isteğe makul bir zaman aşımı tanımlanmalıdır. Ayrıca başarısızlık durumunda ne olacağı önceden kararlaştırılmalıdır: işlem iptal mi edilecek, kuyruğa mı alınacak, önbellekteki eski veri mi gösterilecek? Bu karar verilmediğinde, dış servisin yavaşlaması doğrudan sizin sisteminizin çökmesine dönüşür.
Uzun süren toplu işlemler ise web isteği içinde çalıştırılmamalıdır. Binlerce kaydı işleyen bir rapor, arka plan görevine taşınmalı ve sonuç kullanıcıya bildirimle iletilmelidir.
Kalıcı çözüm: hata ayıklamayı kolaylaştırmak
Her projede baştan yapılması gereken üç ayar vardır: geliştirme ortamında hataların görünür olması, canlı ortamda hataların kaydedilip kullanıcıya gösterilmemesi ve kayıt dosyalarının düzenli olarak izlenmesi. Sürüm bazlı davranış farkları için PHP el kitabı güvenilir kaynaktır.
Sonuç
PHP hatalarının çoğu, hatayı görünür kılmakla yarı yarıya çözülür. Hata kaydını okumayı alışkanlık hâline getirin, karakter seti zincirini baştan doğru kurun, büyük veriyi parçalı işleyin ve karşılaştığınız çözümleri not edin. Aynı hatayla ikinci karşılaşmanız, ilkinin onda biri kadar sürecektir.
Sık Sorulan Sorular
Beyaz ekran genellikle ölümcül bir hatanın gösterilmediği anlamına gelir. Geliştirme ortamında hata gösterimini açın veya sunucunun hata kayıt dosyasına bakın; hatanın dosyası ve satırı orada yazar.
Başlık gönderilmeden önce ekrana çıktı verilmiştir. En yaygın nedenler: dosya başındaki boşluk, kapanış etiketinden sonra kalan satır sonu veya erken yapılan bir yazdırma işlemi. Çözüm, çıktıdan önce yönlendirme yapmaktır.
Sınırı yükseltmek geçici çözümdür. Asıl neden genellikle tüm kayıtları belleğe almaktır. Büyük veri kümelerinde parçalı okuma veya akış kullanılmalıdır.
Zincirin tamamı aynı karakter setini kullanmalıdır: veritabanı ve tablo utf8mb4, bağlantı utf8mb4, sayfa çıktısı UTF-8 ve dosyaların kendisi BOM’suz UTF-8. Bir halka farklıysa bozulma yaşanır.