2014年4月27日星期日

如何解决“Cannot send session cache limiter � headers already sent”错误?

如果使用基于cookie的session(cookie-based sessions),那么在使用Session_start()之前浏览器不能有任何输出,否则会出现"Cannot send session cache limiter � headers already sent"错误,所以首先要确保Session_start()在开始输出之前执行,一般直接放到php文件的最上方。

1.如果Session_start()已经在文件的最上方,且php文件为utf8编码,那这个错误很可能就是由这个php文件的utf-8的BOM问题引起的,您需要设置您的编辑器在编辑utf-8文件时不添加BOM,以Edit plus为例:您需要将工具->参数->文件->UTF_8签名一项中,"总是添加签名"选项改为"总是移除签名"。这样重新编辑保存相应文件后就能解决这个问题。

Notepad++ 在"格式"中"以UTF-8无BOM格式编码"

2. Blank lines (空白行):
检查有<?php ... ?> 后面没有空白行,特别是include或者require的文件。不少问题是这些空白行导致的。我的PHP页面就是因为在<?php前有一个空格导致警告一直出现。

3.终极方法

Session_start()前加@,即@,Session_start();从而屏蔽警告内容。