PHP标头已发送错误

时间:2009-12-12 01:58:44

标签: php session

我得到了一个     警告:session_start()[function.session-start]:无法发送会话缓存限制器 - 已发送的标头

错误,即使我的文件的第一行看起来像:

<?php session_start();  

我在其他网站上看到的所有答案都说是在开始会话之前将信息发送到服务器。为什么我会收到此错误?

3 个答案:

答案 0 :(得分:2)

使用十六进制编辑器检查<?php session_start();之前没有不可见的字符。如果将文件转换为UTF-8,那么许多编辑器会在开头插入BOM字符,这些字符在编辑器中不可见,但会显示在十六进制编辑器中。

答案 1 :(得分:1)

摆脱所有这些问题的最简单方法是启用output buffering

在php.ini

中将output_buffering的值设置为On
output_buffering = On 

答案 2 :(得分:1)

如上所述,当信息为echo()'d,print()'或以其他方式发送到网络浏览器时,会导致此错误。您提到session_start()位于包含的文件中。父/包含文件看起来像这样吗?

<?php
  // Some processing code, etc.
?>
<html>
<body>
Hello here's some content
<?php include('session_starter.php');
</body>
</html>

启用php.ini中的输出缓冲或通过父/包含文件顶部的ob_start()启用输出缓冲将处理此问题。

另外,检查父php文件中的尾随/前导换行符:

 <- There's a newline here, so output has started
<?php
 // Do some stuff
?> <- Newline here, output has started
<?php
 include('session_starter.php');
?>