PHP’de “Cannot Modify Header Information” Hatası ve Çözümü
PHP projelerinde, özellikle Webnimo gibi hareketli sitelerde, sık sık “Cannot modify header information – headers already sent” hatasıyla karşılaşırsınız. Kısaca, bu hata şunu söylüyor: Eğer sayfada header göndermeden önce bir çıktı (mesela echo, print, boşluk ya da HTML) olursa, PHP yeni bir header eklemeye çalıştığında patlıyor. Yani, başlıklar gönderildikten sonra tekrar başlık göndermeye kalkarsan, bu hatayı alırsın.
Diyelim ki Webnimo’da bir kullanıcı giriş sistemi yapıyorsun:
<?php
echo "Hoşgeldiniz Webnimo kullanıcı!";
header("Location: dashboard.php");
?>Burada ilk satırda bir çıktı var. Sonra header fonksiyonu geliyor. PHP hemen hata fırlatıyor. Çünkü header’ı çağırmadan önce çıktı verdin. Header işlemlerini daima sayfanın en başında, herhangi bir çıktı olmadan yapmak gerekiyor.
Peki bu hatadan nasıl kurtulursun?
Header’ı çıktılardan önce çağır: Sayfada hiçbir şey yazdırmadan önce header() fonksiyonunu kullan.
<?php
header("Location: dashboard.php");
exit();
?>Dosyanın başında veya sonunda boşluk bırakma: Kodun başında ya da sonunda fazladan boşluk, satır veya BOM karakteri varsa, bunlar da çıktı sayılır ve header’a engel olur. Küçük gibi dursa da, çoğu zaman sorun buradan kaynaklanır.
Output buffering kullan: ob_start() ve ob_end_flush() fonksiyonlarıyla PHP’nin çıktısını tamponlayabilirsin. Böylece header çağrısı yaparken hata alma riskin azalır.
<?php
ob_start();
header("Location: dashboard.php");
ob_end_flush();
?>Bu yöntemlerle “Cannot modify header information” hatasını rahatça önleyebilirsin. Webnimo projelerinde yönlendirme, oturum yönetimi veya dosya indirme işlerindeysen, header fonksiyonunu hep sayfanın başında kullan. Gereksiz çıktıdan kaçın. Sorun çıkmıyor.
Özetle, PHP’de header hataları ilk başta can sıkıcı olabilir. Ama yukarıdaki taktiklerle kolayca çözülüyor. Kodunu düzenli tutup, output’a dikkat ettiğin sürece, projelerin sorunsuz çalışır.