随机无法发送会话缓存限制器 - 已发送的标头

时间:2013-08-19 22:54:25

标签: php

在服务器日志中,我经常看到有错误

  

PHP警告:session_start()[function.session-start]:无法发送   会话缓存限制器 - 已发送的标头(输出始于   /public_html/templates/meta.php:294)in   第7行的/public_html/include/query.php

很明显我的输出很快就开始......但是

错误有时只生成,我无法重现它,这可能是因为`session_start()'在if语句中。

这是query.php的开头

<?php
//  we are including here so that we can check user logged in or not on each and everypage  
if(!isset($_SESSION))
{
    //To make the session work across multiple domains.
    session_set_cookie_params(0, '/', '.mydomain.com');
    session_start();        
}

Everywhere query.php包含在之前 meta.php

meta.php主要是html和js,只有很少的php块,第294行是js函数的中间部分。

但最让我感到兴趣的是,我发现这个错误也适用于根本不涉及这两个文件的请求。

例如

从访问日志

  

66.249.72.33 - - [19 / Aug / 2013:22:44:30 +0100]“GET /robots.txt HTTP / 1.1”404 7592“ - ”“Mozilla / 5.0(兼容; Googlebot / 2.1;   + http://www.google.com/bot.html)“

     

66.249.72.33 - - [19 / Aug / 2013:22:44:30 +0100]“GET /content_files/SPIKES%20protocol.pdf HTTP / 1.1”200 215267“ - ”   “Mozilla / 5.0(兼容; Googlebot / 2.1;   + http://www.google.com/bot.html)“

和错误日志

  

[Mon Aug 19 22:44:30 2013] [错误] [客户端66.249.72.33:44269] AH01215:PHP警告:session_start()[function.session-start]:无法发送会话cookie - 已经发送的标头(输出从/public_html/templates/meta.php:294开始)在第7行的/public_html/include/query.php中

     

[Mon Aug 19 22:44:30 2013] [错误] [客户端66.249.72.33:44269] AH01215:PHP警告:session_start()[function.session-start]:无法发送会话缓存限制器 - 已发送的标头(输出从/public_html/templates/meta.php:294开始)在第7行的/public_html/include/query.php中

正如您在22:44:30所见,谷歌机器人提出了2个请求 robots.txt获得第1名,因为没有robots.txt而获得404 一些pdf文件的第二个

在这两种情况下都没有涉及PHP代码,但我收到了针对这些请求的PHP警告。

这些不是谷歌机器人之前或之后的其他访问日志。

代码的一般结构是这样的

<?php
if(isset($_GET['url1'])){$url1 = $_GET['url1'];}else {$url1 = "";}
if(isset($_GET['url2'])){$url2 = $_GET['url2'];}else {$url2 = "";}
require_once('include/query.php');
require_once('include/auth.php');

/* some php code */
?>

<?php include 'templates/meta.php'; ?>

//html

但是对于完全不使用query.php或meta.php的请求也会生成错误,就像在给定的示例中一样。

3 个答案:

答案 0 :(得分:2)

通常,我发现“已发送标头”错误实际上是空白错误。也许检查所有这些页面之间共享的文件,看看在关闭?>标记后是否有额外的换行符或空格。通常我会尽量避免在文件末尾使用关闭PHP标记,因为无论如何它们都会被解析器丢弃。

答案 1 :(得分:0)

标头已发送错误主要是在用于重定向或其他内容的header函数之前发生回声或任何其他输出语句时发生。

答案 2 :(得分:0)

问题出在自定义404页面上。

为了澄清我必须说这是一个5岁的网站,我没有设计它只是做了一些修改。