解决session_start出现的headers already sent错误

解决session_start出现的headers already sent错误

 

Tags: BOM, header, php, session, UTF-8   欢迎引用、转载、修改,在转载时附上本文URL即可。

用记事本将文件全部转换成UTF-8格式后使用session_start()和header()函数的时候报警告,类似下面这种:

 

Warning: Cannot send session cookie - headers already sent by (output started at F:done.php:2) in F:done.php on line 4

Warning: Cannot send session cache limiter - headers already sent (output started at F:done.php:2) in F:done.php on line 4

 

在网上查找相关内容得知是在session_start()之前出现了输出,给出的解决方法也是包罗万像。一些人说是打开php.ini中的session_auto_start;有些人说是要建立temp文件夹,修改session.save_path的值指向temp文件夹;还有一些要求使用Ob_Start()函数。

 

不过,上面没有一种方法能起作用。

 

后来继续寻找原因,终于发现是因为使用记事本进行UTF-8格式转换时,文件开始处会被插入BOM(Byte Order Mark,字节序标记),正是这个BOM影响到了session。

 

网上给出了一些解决办法,其中之一是用写字板打开,会看到一个乱码(3字节长),删除即可,不过我没看到有乱码。再后来有人推荐使用Uedit32,在保存时选择“UTF-8 无BOM”就可以了,使用后session执行正确。

 

发现使用UltraEdit-32保存为UTF-8的一部份文件被EditPlus和记事本识别为ANSI编码。这篇UTF-8的BOM问题说明了很多问题,这次也终于发现了UltraEdit-32的确比EditPlus强悍许多,所以放弃EditPlus转向UltraEdit-32了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值