PHP ‘Cannot send session cache limiter – headers already sent’ hatası

Posted: Eylül 25th, 2007 | Author: | Filed under: PHP | 27 Comments »

Bu hata genelde php’de oturum yönetimi ile alakalı işler yaparken çıkar.. Daha önce bir çok kez karşılaştım ve geleneksel yöntemle çözdüm fakat bugünkü farklıydı.Bu hatanın geleneksel çözüm yöntemi;

<? ob_start();
session_start(); ?>

kodlarını sayfanın en en üstüne almak. Fakat bugün bu şekilde çözemedim. Notepad++ kullanıyorum ve tüm kodları UTF8 formatında yazıyorum.. Benim bu hatayı almamın sebebi kodları yazarken UTF-8 kodlamasını kullanmammış.. Bunu farketmem uzun sürdü. Çözümleri denerken, bir de şu dosyanın karakter kodlamasını ANSI yapayım dedim ve sorun çözüldü… Yani iki çözüm var;

  1. ob_start ve session_start kodlarını sayfalarınızın ilk satırına almak
  2. kodlarınızı yazarken kullandığınız dosyanın karakter kodlamasını ANSI yapmak…

Neden UTF-8 ile yazamıyoruz bilmiyorum.. Benim sorun o şekilde çözüldü ama utf8 ile de yazılmalı.. Eğer yeni bir bilgi bulursam yazarım veya bilen varsa lütfen paylaşsın..


27 Comments on “PHP ‘Cannot send session cache limiter – headers already sent’ hatası”

  1. 1 eylultoprak said at 14:25 on Ekim 10th, 2007:

    ansi işaretleyip bom olabilir.
    yada utf8 işaretliyip bom olabilir ikisi biraz değişiyor.

    ama en sağlıklı yontem..

    crtl+a ctrl+x kodlama türü kafanıza göre

    sonra crtl+s ve ctrl+v
    tekrar ctrl+s yapın ve deneyin bakalım olacakmı.

    %90 olması lazım eğer kodlama kaynaklı bazen olmuyor ama deneyerek bu şekilde çözülebilir.

  2. 2 Hüseyin Berberoğlu said at 14:48 on Ekim 11th, 2007:

    Teşekkürler yorumunuz için.. Artık ben notepad++’ta UTF-8 without BIN’i kullanıyorum ve bir problemle karşılaşmıyorum.. Herkese de bunu öneririm :)

  3. 3 ZELZELE said at 21:17 on Kasım 15th, 2007:

    tsklerr

  4. 4 Emin said at 02:36 on Şubat 27th, 2009:

    Birde ben buldum :) eğer ki bir dosya içerisine başka sayfaları include yöntemi ile çağırıyorsanız ve o başka sayfalar içerisinde session işlemi yapıyorsanız o bir dosyanın başına yazınız o kodları :) aksi taktirde hata alacaksınız. Makale için ayrıca teşekkür ederim.

    Saygılarımla
    Emin ÖZTÜRK

  5. 5 Hüseyin Berberoğlu said at 23:42 on Şubat 27th, 2009:

    @Emin teşekkürler. Anlattığın olay hatanın oluşma sebebi.

  6. 6 nurah said at 20:41 on Nisan 4th, 2009:

    tskler

  7. 7 Erdal YAZICIOGLU said at 11:26 on Nisan 6th, 2009:

    Aynı hatayı ben Zend Framework ile çalışırken aldım. Bende kodlamayı Notepad++ ile yapıyorum. MVC de eğer ANSI ile yazarsam problem olmuyor and UTF-8 ile yazınca problem oluyordu. Yaklaşık bir hafta uğraştım sorun nedir diye. CSS den tutun tüm dosyaları tek tek gezdim. Sorunu aşamadım. En sonunda UTF-8 without BOM ile sorunu aştım. Zaten UTF ile kodladığınızda sayfanın kaynak kodlarına bakarsanız, sayfanın en üst tarafında ufak bir kare göreceksiniz.

    Kolay gele

  8. 8 fikret said at 06:59 on Nisan 17th, 2009:

    ben de aynı sorunu alıyordum. ilginçtir burda yazıldığı gibi session_start kodunu en üste aldım sorun çözüldü. bu defa da session yönlerin birinde çalışmaz oldu. yani her yerde çalışiyor ama linklerin birinde çalışmıyor.üye girişi yaptığınızda bütün bağlantılar sorunsuz çalışırken hesabım a tıkladığınızda sorun veriyor.

  9. 9 Hüseyin Berberoğlu said at 12:17 on Nisan 20th, 2009:

    @fikret e-posta ile bana sorunun başka bir problemden kaynaklandığını söyledi.

  10. 10 Furkan Çalışkan said at 13:39 on Nisan 20th, 2009:

    Bazen php.ini’deki output_buffering değişkenini Off’dan On’a çevirerek de bu sorun düzelebiliyor. İlginç.

  11. 11 Hüseyin Berberoğlu said at 13:43 on Nisan 20th, 2009:

    @Furkan bu çözüm de güzelmiş, teşekkürler.

  12. 12 Emin said at 16:49 on Nisan 20th, 2009:

    Arkadaşlarım birde tavsiyem şu olur; eğer ki sayfalar içerisinde include yöntemi kullanıyorsanız, genel kullanım olan değil de şu şekilde kullanmanızı tavsiye ederim:

    ** PHP TAG **

    include_once ‘dosyaadi.php’;

    ** PHP TAG **

    burdada fonksiyon çakışmaları hatasını engellemiş olursunuz.

    Saygılarımla
    Emin ÖZTÜRK

  13. 13 Emuman said at 17:28 on Temmuz 19th, 2009:

    Arkadaşlar hepinize çok teşekkür ederim. Kaç gündür bununla uğraşıyordum, denemediğim şey araştırmadığım yer kalmadı ve bıkma aşamasına gelmiştim. PHP tabanlı bi scriptimde türkçe karakterlerde sorun oluyordu bu makaleyi okuduktan sonra NOTEPAD++ ile tüm dosyalarımı UTF-8 without BOM ile kaydettim sonuç mükemmel :D Artık hiçbir sorun kalmadı. Allah razı olsun hepinizden ;)

  14. 14 maydesign said at 12:26 on Temmuz 31st, 2009:

    Vallaha arkadaşlar sepetek ekle- ürün sil – sepeti güncelle – ürün ayrıntı vs sayfalarımın tamamında hiçbir sorun yokken sepeti göster linkini yaparken HATA vermeye başladı :-) ben hatayı şöle çözdüm sizinde bildiğiniz gibi @ ile hatayı görmezden gel dedim kod sonuç veriyor fakat hata görüntü kirliliğine sebeb oluyordu bölece halletmiş olduk.

  15. 15 Ali Furkan said at 18:11 on Mart 18th, 2010:

    Herkese teşekkürler sorunu ben de hallettim :)

  16. 16 Emin ÖZTÜRK said at 22:21 on Mart 18th, 2010:

    @Emuman yorumun sonu kosla oksi mex reklamı gibi bitmiş :D. Sonuç mükemmel :) hehe

  17. 17 Abdullah said at 12:50 on Mart 25th, 2010:

    normal UTF-8 dosyaların ilk üç karakteri bom kaydıdır. Bu ilk üç karakter php etiketlerinin içinde olmadığından print edilir. Karakterler print edilince de headerlar gönderilmiş olur. Headerlar gönderildiğinden session headerları geç kalmış olur ve uyarı verir. Dokümanınız utf-8 olmak zorunda ise, ansi as utf-8 olarak kaydetmelisiniz. Bu bom suz utf-8 anlamına gelir. Asıl sebep headerlar tamamlanmadan print gerçekleştiğinden varsayılan headerların gönderilmesi, kalanının elde kalması.

  18. 18 Hüseyin Berberoğlu said at 13:04 on Mart 25th, 2010:

    @Abdullah; Bu detaylı bilgilendirme için teşekkürler.

  19. 19 Ahmet said at 18:24 on Haziran 23rd, 2010:

    Bilgiler için sağolun bende kodları kesip yeni döküman açtım ve utf-8 dedim onun üzerine kaydettim sorun çözüldü.

  20. 20 saslove1984 said at 16:20 on Temmuz 13th, 2010:

    notepad++ ile ansi yaptım sorun çözüldü teşekkürler.

  21. 21 Murat Çimen said at 14:17 on Temmuz 20th, 2010:

    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.

  22. 22 Sercan TAPSIN said at 18:59 on Ocak 26th, 2011:

    Sayfanın başında yada içeriğinde. Kullandığınız editörlerin referans sayfaları vardır. Bunları kaldırın sıfır tertemiz sayfanın en üstüne ekleyin.

  23. 23 cihan said at 02:57 on Mart 13th, 2011:

    hocam ellerine sağlık verdiğin kodları dediğin şekilde yaptım sorun kalmadı emeklerine sağlık

  24. 24 cihan said at 02:57 on Mart 13th, 2011:

    son olarakta front page kullanıyorum oradan herhangi bir değişiklikte yapmadım saygılar

  25. 25 ahmet selim said at 20:16 on Nisan 11th, 2011:

    çok basit ama çok sinir bozucu bir problem. basit bir çözümü olması içimi rahatlattı, zira satın aldığım scriptte bile bu hatayla karşılaştım ve bu beceriksiz yazılımcılar bile sorunu bitürlü çözemediler.
    teşekkür ediyorum :)

  26. 26 Alone said at 02:19 on Haziran 17th, 2011:

    UTF-8 without BOM olarak çalışın ömür boyu içiniz huzur dolsun :) Güzel yazı sağolun.

  27. 27 Safa said at 23:49 on Eylül 1st, 2011:

    Bence php tagı düzgün açsanız bu hata ile karşılaşmazsınız diye düşünüyorum :D Bir müşterim aynı hata ile karşılaştı ve <?php şeklinde düzelttirdim sorunu halloldu. Tabi kaydederken karakter kodlaması değişmiş olabilir fakat genede <?php yi ihmal etmeyin bazı serverlarda sorun çıkarabiliyor.


Leave a Reply