29 Ekim 2026 - 01:27
PHP'de Headers Already Sent Hatası: Çıktıyı Başlatan Satırı Bulma Görseli
PHP

PHP'de Headers Already Sent Hatası: Çıktıyı Başlatan Satırı Bulma

0 Yorumlar

PHP'de yönlendirme yapmak için header() çağrısı yazmış olabilirsiniz; buna rağmen tarayıcı eski sayfada kalır ya da çerez başlığı gönderilemez. Headers already sent uyarısı genellikle başlığın yanlış olduğu değil, başlık gönderilmeden önce yanıt gövdesine bir şey yazıldığı anlamına gelir. Bulmanız gereken yer çoğu kez header() satırı değil, ondan önceki ilk çıktıdır.

Önce PHP'nin işaret ettiği konumu alın

headers_sent(), başlıkların gönderilip gönderilmediğini ve gönderildiyse ilk çıktının başladığı dosya ile satırı verebilir. Geliştirme ortamında bu bilgiyi sunucu günlüğüne yazın; herkese açık hata sayfasında tam dosya yolunu ziyaretçiye göstermeyin.

GENEL
$file = '';
$line = 0;

if (headers_sent($file, $line)) {
    error_log("Headers started at {$file}:{$line}");
}

Bu kontrol sorunu kendi başına düzeltmez; araştırmayı doğru dosyaya yönlendirir. İşaret edilen satırda görünür bir echo yoksa dosyanın başında UTF-8 BOM, kapanış ?> etiketinden sonraki boşluk veya dahil edilen başka bir dosyanın çıktısı olup olmadığına bakın. Bir PHP uyarısının ekrana basılması da aynı etkiyi yaratabilir.

Uyarı giriş dosyasını gösteriyorsa, bu dosyanın çağırdığı yapılandırma ve şablonları sırayla daraltın. Uyarı bir dahil edilen dosyanın satırını gösteriyorsa o satırdan önceki HTML veya boşlukları inceleyin. Salt PHP dosyalarında kapanış etiketi kullanmamak, dosya sonundaki görünmez karakterlerin yanıt gövdesine eklenmesi ihtimalini azaltır.

Yönlendirmeyi tek akışta tutun

Başarılı oturum kontrolünden sonra yönlendirme yapılıyorsa başlık çağrısını çıktısız bootstrap işlemlerinden sonra, fakat herhangi bir şablon veya HTML üretiminden önce çalıştırın. Ardından mevcut isteğin devam etmesini önlemek için akışı bitirin:

GENEL
header('Location: /hesabim', true, 302);
exit;

Kalıcı bir yönlendirme kodu vermeden önce davranışın gerçekten kalıcı olduğundan emin olun; geliştirme sırasında tarayıcı kalıcı yönlendirmeyi önbelleğe alabilir. HTTPS yönlendirmesini uyguladığınız sayfalarda da aynı başlık sırası kuralı geçerlidir; temel kurulum için PHP ile HTTPS adres yönlendirmesi rehberiyle birlikte değerlendirin.

Çıktı arabelleğini varsayılan çözüm saymayın

ob_start() bazı uygulamalarda bilinçli bir çıktı yönetimi stratejisidir. Ancak hatayı saklamak amacıyla her sayfanın başına eklemek, erken çıktının nereden geldiğini belirsizleştirir ve bellek kullanımını artırabilir. Önce ilk çıktıyı üreten dosyayı kaldırın veya akışı düzeltin; tamponlamayı ancak uygulamanın yanıt tasarımının parçasıysa kullanın. Resmî headers_sent() ve header() belgeleri parametreleri ve kısıtları açıklar.

Benzer Yazılar

Yorumlar (0)

Henüz yorum yok. İlk yorum yapan sen ol!

Yorum Yap