Author: Adem Çırak, Date: 04 February 2012
Time to read: 1 min.
Table Of Contents
Php’de güvenlik ve ya üyelik sistemi için uğraşıyorsak sessionlar vazgeçilmezimiz. Bunu ilk defa kullananlar eminim ki "header already sent" diye bir hata almışlardır. Session kullanılırken yapılan belli başlı hatalardan bulduklarımı çözümleriyle birlikte sizinle paylaşıyorum:
1.Session start’dan önce print ile bişeyler basmak.
İnternette gördüğüm kadarıyla en çok yapılan hata. session_start() fonksiyonunu çağırmadan önce ekrana hiçbir çıktı basılmaması gerekir. include edilen dosyalar da dahil.
2.Safe mod’un açık durumda olması.
Bu her zaman hataya neden olmuyor ama bazı sunucularda hataya neden oluyor (neden bende bilmiyorum server bilgim yok). Safe modu kapatmak için, -hostunuz için veriyorsa tabi- php.ini dosyası oluşturup ‘safemod = off’ yazmanız yeterli olacaktır.
3.Dosya kayıt kodlaması
Windows tabanlı çalışanların karşılaştıkları hata. Bu yazılı yazma nedenim aslında bu. Dosya kodlaması çıktıya etki ediyor. BOM içeren kodlamalarda sizin yazdıklarınız dışında görmediğiniz tanımlarda oluyor. Bu nedenle o hatayı alabiliyoruz. Eğer hatanın bu nedenle oluşuyorsa Nodpad++ ile php dosyanızı açın ve Encoding sekmesinden kayıt Formatını ‘Convert to UTF-8 Without BOM’ u seçin (Eğer Notpad++’ı Türkçe olarak kullanıyorsanız Kodlama -> UTF-8 (BOM’suz) olarak dönüştürü seçmeniz yeterli olacaktır).
Bu önerilerim kanımca yeterli olacaktır ama hala hata alıyorum diyorsanız hataları engellemek için 2 önerim var:
1.ob start ve ob end flush kulanmayı deneyiniz. Bunu kullanırken ob startı sessionunda üstüne alıyoruz. Örnek kod:
<!--?php
ob_start();
session_start();
// kodlarınız
echo 'buraya kodlar';
// kodlarınız bitis
ob_end_flush();
?-->
2.Hatayı gizlemek. Session start’ın başına “@” koyarak hatanın görünmesini engelleyebilirsiniz ama kod çalışmaz. Önemli değil kod benim işimi görür scriptteki diyorsanız kullanabilirsiniz. Örnek kullanım:
<!--?php
print 'hataya neden oldum galiba :(';
@session_start();
?-->