Warning: Cannot Modify Header Information – Headers Already Sent
- Yayınlandı:
- Son teknik kontrol:
Warning: Cannot modify header information - headers already sent by (output started at /wp-config.php:1) in /wp-includes/pluggable.php on line …Belirtiler
- “Warning: Cannot modify header information - headers already sent by” satırı
- Giriş yaptıktan sonra boş sayfa veya yönlendirme olmaması
- Kaydet/Güncelle düğmesinden sonra beyaz sayfa ve uyarı
- Sorun bir dosyayı elle düzenledikten veya siteyi taşıdıktan sonra başladı
Kısa cevap
Bu uyarı, PHP’nin HTTP başlıklarını (yönlendirme, çerez) göndermeye çalıştığı anda sayfaya zaten çıktı yazılmış olduğunu söyler. Başlıklar yalnızca herhangi bir çıktıdan önce gönderilebilir. Suçlu çoğunlukla bir dosyanın başındaki boşluk veya görünmez BOM karakteri ya da kapanış ?> etiketinden sonra kalan boş satırdır. Mesajdaki “output started at” bölümü çıktının başladığı dosyayı ve satırı gösterir; düzeltilecek yer orasıdır.
Önemli noktalar
- Mesajdaki “output started at dosya:satır” sorunun yeridir; “in … on line” kısmı yalnızca etkilenen yerdir.
- Dosyanın <?php etiketinden önceki tek bir boşluk veya BOM karakteri bu hatayı üretir.
- Yalnızca PHP içeren dosyalarda kapanış ?> etiketini yazmamak bu hatanın en yaygın kaynağını ortadan kaldırır.
- Çıktı tamponlaması açık sunucularda aynı hata görünmeyebilir; bu yüzden hata taşımadan sonra ortaya çıkabilir.
Mesajı doğru okumak
Mesajda iki dosya yolu vardır ve çoğu kişi yanlış olanı düzenler. “output started at” sonrasındaki dosya ve satır, çıktının başladığı yerdir — düzeltilecek dosya budur. “in … on line” kısmı ise başlığı göndermeye çalışan yerdir; genellikle WordPress çekirdeğindeki pluggable.php’dir ve orada bir sorun yoktur.
| “output started at” gösterdiği yer | Olası neden | Çözüm |
|---|---|---|
| wp-config.php:1 | Dosyanın başında <?php öncesi boşluk veya BOM karakteri | Dosyayı UTF-8 (BOM’suz) kaydedin, <?php en baştaki karakter olsun |
| functions.php’nin son satırı | Kapanış ?> etiketinden sonra boş satır | Dosya sonundaki ?> etiketini ve sonrasındaki boşlukları silin |
| Bir eklenti dosyası | Eklenti başlık gönderilmeden önce çıktı üretiyor (echo, hata mesajı) | Eklentiyi güncelleyin veya devre dışı bırakıp geliştiricisine bildirin |
| Bir PHP uyarısının kendisi | Önce başka bir uyarı ekrana yazılmış, o da çıktı sayılmış | İlk uyarıyı düzeltin; canlı sitede hata gösterimini kapatın |
BOM karakteri nedir, nasıl temizlenir?
BOM (Byte Order Mark), bazı metin düzenleyicilerin UTF-8 dosyaların en başına eklediği görünmez bir karakterdir. Dosyada göremezsiniz ama PHP onu çıktı olarak gönderir. Kod düzenleyicinizde dosyayı “UTF-8” (BOM’suz) olarak yeniden kaydetmek sorunu giderir. Windows Not Defteri’nin eski sürümleri gibi araçlar BOM ekleyebildiği için PHP dosyalarını kod düzenleyiciyle düzenleyin.
<?php
// Yalnızca PHP içeren dosyalarda kapanış etiketi yazılmaz.
// Böylece sonuna yanlışlıkla boşluk veya boş satır eklenemez.
add_action( 'init', function () {
// …
} );