0

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

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

似乎很明显我很快就开始了输出......但是

错误只是有时会产生,我无法重现它,这可能是因为 `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();        
}

无处不在 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 )"

和错误日志

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

[2013 年 8 月 19 日星期一 22:44:30] [错误] [客户端 66.249.72.33:44269] AH01215:PHP 警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送(输出已启动在 /public_html/templates/meta.php:294) 在 /public_html/include/query.php 的第 7 行

正如您在 22:44:30 看到的那样,谷歌机器人第一次为 robots.txt 提出了 2 个请求,他得到了 404,因为没有 robots.txt 第二次为某些 pdf 文件

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

在这些之前或之后,这些不是来自 google bot 的其他访问日志。

代码的一般结构是这样的

<?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 的请求也会生成错误,就像在给定的示例中一样。

4

3 回答 3

2

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

于 2013-08-19T22:59:05.603 回答
0

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

于 2013-08-19T23:00:58.067 回答
0

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

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

于 2013-08-20T16:33:06.253 回答