PHP’de Cannot modify header information hatası
Selam arkadaşlar,
Warning: Cannot modify header information - headers already sent by (output started at ....) in ... on line xx
hatası tek hatadan dolayı çıkıyor oda headers fonksiyonunu kullanmadan önce bir çıktı almanızdan kaynaklanır. Bu çıktı sizin isteyerek almış olduğunuz veyahut istemeden almış olduğunuz bir çıktı olabilir.
Örneğin;
<div align="center">Deneme sayfa</div>
<?
header("Location: http://www.phpogreniyorum.info");
?>
şeklindeki bir kod hata verdirecektir. Bunun sebebi ise header fonksiyonundan önce bir çıktı alınmasıdır. Bu hatanın çıkmasını istemiyorsanız ob_start fonksiyonunu kullanabilirsiniz. ob_start fonksiyonu kullandığınız taktirde ob_end_flush fonksiyonunu kullanmayı unutmayınız.
<?
ob_start();
?>
<div align="center">Deneme sayfa</div>
<?
header("Location: http://www.google.com.tr");
ob_end_flush();
?>
Sonuç olarak şeklinde yapmanız gerekecektir.
Birde hiç bir şekilde çıktı almadığınız sayfalarda bu çıkıyor. Misal
<?
include "session.php";
if($_SESSION['yonetici'])
header("Location: index.php?yonetici");
else
header("Location: index.php?giris");
?>
şeklinde bir kodumuz var ve session.php içinde herhangi bir çıktı veren bir kod yok ise, ve bu sayfada bu hatayı alıyorsanız UTF8 Bom karakteri başınıza musallat olmuş demektir. UTF8 bom karakteri  gib karakterlerden oluşan ve sayfanın başında yer alan karakterlerdir. Bu karakter her editörde görünmüyor maalesef. Bunun için size önereceğim cuteHTML programı. cuteHTML programında bu karakterleri görebiliyorsunuz. CuteHTML programı ile include edilen dosyaları ve mevcut dosyayı açarak UTF8 Bom karakterini silmeniz sorununuzu düzeltecektir. CuteHtml programını buradan indirebilirsiniz.
Ama benim size önerim hiç program işine girmeden ve ob_start demek zorunda bırakmadan javascript ile sayfayı yönlendirmek olacaktır. Aşağıdaki kod işinize yarayacaktır.
<script type="text/javascript" language="JavaScript">window.location.href="index. php?sayfa=GirisYap;"</script>
Nice sorunsuz kodlamalar :)
04 Ocak 2010, 23:00
Ramazan atlamamak gerekir ki bu hatayı ayrıca, unix formatinda kaydetmeyi unuttuğunda da alırsın :) Eğer ob_start(); da yaptığınızda hata devam ediyorsa. dosyanız *nix formatinda kaydedin.
05 Ocak 2010, 08:56
Mehmet eklemen için teşekkürler. Bunu bilmiyordum :)
20 Temmuz 2010, 11:52
Known problem with Byte Order Mark (BOM) and header() in pages of a site.
For example at sending headings or to a dynamic conclusion in other coding distinct from UTF-8 by means of XSLT ().
To clean all symbols BOM from the text of page:
1. exclude BOM from the main file;
2. write down function of a return call for the buffer
it will exclude BOM from a code of the connected files;
3. do not experience for BOM in connected files;
4. be pleased.
01 Mayıs 2011, 22:29
Cok tesekkurler