session 仅在两个页面上出现缓存错误 - 所有其他页面都工作正常
session cache error only on two pages - All other pages are working fine
我从开发者那里开发了一个网站。我的网站运行良好。突然间,我发现每当我点击“联系我们”link 时,我都会收到一个错误
"Warning: session_start() Cannot send session cache limiter - heards
already sent (output started at /home/xxx/public_html/contact.php:1)
in /home/xxx/public_html/connection/config.php on line 2"
这在以前是不会发生的。开发人员不支持我并且忽略我的电子邮件。于是在网上查了很多,发现是session_start()的定义方式有问题。
这里是contact.php
的代码
<?php
include("connection/config.php");
session_start();
?>
<?php
if(isset($_POST['enquiry2']))
{
.
.
.
}
?>
<!DOCTYPE html PUBLIC
.
.
.
<?php include "footer.php"; ?>
</html>
代码config.php
<?php
session_start();
error_reporting(0);
if ($_SERVER['HTTP_HOST'] == 'localhost' || $_SERVER['HTTP_HOST'] == '192.168.1.111')
{
$con=
.
.
}
else
{
$con=
.
.
}
error_reporting(E_NOTICE ^ E_WARNING ^ E_ALL);
require_once("logic/class.config.php");
.
.
<?php date_default_timezone_set("Asia/Kolkata");?>
在很多文章中,我读到 session_start() 应该在页面顶部,所以我颠倒了 contact.php 的第二行和第三行,但它给了我同样的错误指向contact.php 文件。
"Warning: session_start() Cannot send session cache limiter - heards
already sent (output started at /home/xxx/public_html/contact.php:1)
in /home/xxx/public_html/connection/contact.php on line 2"
早些时候它指向 config.php 文件
注册页面也发生了同样的事情。我有三个文件 register.php、register1.php 和 register2.php。同样的错误仅在 register3.php 加载页面时发生,并在单击提交按钮时再次发生。
我请求是否有人可以帮助我确定问题。
谢谢。
编辑
如 Premalatha 所建议:
从 contact.php 中删除了 session_start();
-> 但警告相同。
在 include("connection/config.php");
之上放置 session_start();
-> 但警告相同。
根据 Alok 的建议:
我不知道如何检查我是否正在发送内容或在 session_start()
之前的某处调用 header。 session_start()
行要么在顶部,要么在第二行,第一行是 include("connection/config.php");
,我试图在没有帮助的情况下颠倒交换。
一件事我不明白其他 .php 文件也有相同的编码那么为什么这个警告只出现在 contact.php 上?同样,register1.php、register2.php也有相同的编码,但为什么只有在加载和卸载时才会出现警告register3.php。之前一切正常,这突然开始,我不记得对这些文件中的任何一个进行过任何更改,所以问题可能出在其他地方。我也想尝试 wangpeng 的建议,但我在 cpanel 的任何地方都找不到 php.ini 文件。此外,我没有弄清楚如何检查文件的代码是否为 UTF8-BOM。另外我应该把 OB_START()
放在哪里,因为我无法确定 header 在哪里。
EDIT2
顺便说一句,此警告不会影响网站的功能。错误只是出现然后消失。但是,它扰乱了css,所有的字体和图像都变大了,页面看起来要折腾了。谁能告诉我如何忽略这个错误,让系统完全不显示它?
Headers already sent表示PHP脚本已经将headers发送到服务器,现在无法修改。
这意味着在 session_start()
之前您的脚本必须向服务器发送内容或调用 header
并且在发送之后脚本正在调用 session_start() 函数试图修改 headers。
您的解决方案是检查您没有发送内容或在两个脚本中 session_start()
之前的某个地方调用 header
。
更新:
试试这个,
找到*.php中指向contact.php的所有文件,找到session_start();
在里面。
将其替换为以下内容,
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
以上代码将确保您不会再次启动 session(如果它已经启动)。
session_start();
已包含在 config.php 文件中。
您可以在 contact.php 文件中删除,它将开始正常工作。
如果您仍然遇到任何问题,那么您可以放置 session_start(); include 语句上方 contact.php 中的代码行。
1.php.ini session.auto_start = 0 到 session.auto_start = 1 。
2.check文件编码是UTF8-BOM?是的,UTF8-BOM 到 UTF8。
3.OB_START();在header
之前
没想到解决方案会是这样!
然而,当我从四个不同的人那里读到同样的东西时,我不得不尝试这个并且它起作用了!我的包含文件中几乎没有前导、尾随和空白 space。我摆脱了它们,我的问题就解决了。
这是对我帮助很大的文章
Troubleshooting "Warning: session_start(): Cannot send session cache limiter - headers already sent"
如果包含文件中的 php 标记(或 html 或任何输出)后有空白 space,则会出现此错误。 -来自 Imdad
出现此问题的原因有 99% 可能是在您的包含文件末尾尾随 spaces(是的 - 我知道这听起来不太可能,但请尝试一下)。删除尾随的 spaces、换行符等...一切都会好起来的。 -克里斯 B
一个白色-space before <?php
也发送输出并出现错误。结论:在调用 session_start() 或 header() 函数之前不要输出任何字符,即使是 white-space 或换行符 -by Biswadeep Sarkar
对于可能 运行 跨越此的其他人 - 如果有人不小心留下了 php 包含文件的尾随 space,也会发生这种情况。示例:
<?php
require_once('mylib.php');
session_start();
?>
在上面的例子中,如果 mylib.php 在结束 ?> 标签后有空白 spaces,这将导致错误。如果您有 included/required 个文件,这显然会很烦人。幸运的是,该错误告诉您哪个文件有问题。 -罗斯
我从开发者那里开发了一个网站。我的网站运行良好。突然间,我发现每当我点击“联系我们”link 时,我都会收到一个错误
"Warning: session_start() Cannot send session cache limiter - heards already sent (output started at /home/xxx/public_html/contact.php:1) in /home/xxx/public_html/connection/config.php on line 2"
这在以前是不会发生的。开发人员不支持我并且忽略我的电子邮件。于是在网上查了很多,发现是session_start()的定义方式有问题。
这里是contact.php
的代码<?php
include("connection/config.php");
session_start();
?>
<?php
if(isset($_POST['enquiry2']))
{
.
.
.
}
?>
<!DOCTYPE html PUBLIC
.
.
.
<?php include "footer.php"; ?>
</html>
代码config.php
<?php
session_start();
error_reporting(0);
if ($_SERVER['HTTP_HOST'] == 'localhost' || $_SERVER['HTTP_HOST'] == '192.168.1.111')
{
$con=
.
.
}
else
{
$con=
.
.
}
error_reporting(E_NOTICE ^ E_WARNING ^ E_ALL);
require_once("logic/class.config.php");
.
.
<?php date_default_timezone_set("Asia/Kolkata");?>
在很多文章中,我读到 session_start() 应该在页面顶部,所以我颠倒了 contact.php 的第二行和第三行,但它给了我同样的错误指向contact.php 文件。
"Warning: session_start() Cannot send session cache limiter - heards already sent (output started at /home/xxx/public_html/contact.php:1) in /home/xxx/public_html/connection/contact.php on line 2"
早些时候它指向 config.php 文件
注册页面也发生了同样的事情。我有三个文件 register.php、register1.php 和 register2.php。同样的错误仅在 register3.php 加载页面时发生,并在单击提交按钮时再次发生。
我请求是否有人可以帮助我确定问题。
谢谢。
编辑
如 Premalatha 所建议:
从 contact.php 中删除了 session_start();
-> 但警告相同。
在 include("connection/config.php");
之上放置 session_start();
-> 但警告相同。
根据 Alok 的建议:
我不知道如何检查我是否正在发送内容或在 session_start()
之前的某处调用 header。 session_start()
行要么在顶部,要么在第二行,第一行是 include("connection/config.php");
,我试图在没有帮助的情况下颠倒交换。
一件事我不明白其他 .php 文件也有相同的编码那么为什么这个警告只出现在 contact.php 上?同样,register1.php、register2.php也有相同的编码,但为什么只有在加载和卸载时才会出现警告register3.php。之前一切正常,这突然开始,我不记得对这些文件中的任何一个进行过任何更改,所以问题可能出在其他地方。我也想尝试 wangpeng 的建议,但我在 cpanel 的任何地方都找不到 php.ini 文件。此外,我没有弄清楚如何检查文件的代码是否为 UTF8-BOM。另外我应该把 OB_START()
放在哪里,因为我无法确定 header 在哪里。
EDIT2
顺便说一句,此警告不会影响网站的功能。错误只是出现然后消失。但是,它扰乱了css,所有的字体和图像都变大了,页面看起来要折腾了。谁能告诉我如何忽略这个错误,让系统完全不显示它?
Headers already sent表示PHP脚本已经将headers发送到服务器,现在无法修改。
这意味着在 session_start()
之前您的脚本必须向服务器发送内容或调用 header
并且在发送之后脚本正在调用 session_start() 函数试图修改 headers。
您的解决方案是检查您没有发送内容或在两个脚本中 session_start()
之前的某个地方调用 header
。
更新:
试试这个,
找到*.php中指向contact.php的所有文件,找到session_start();
在里面。
将其替换为以下内容,
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
以上代码将确保您不会再次启动 session(如果它已经启动)。
session_start(); 已包含在 config.php 文件中。 您可以在 contact.php 文件中删除,它将开始正常工作。
如果您仍然遇到任何问题,那么您可以放置 session_start(); include 语句上方 contact.php 中的代码行。
1.php.ini session.auto_start = 0 到 session.auto_start = 1 。 2.check文件编码是UTF8-BOM?是的,UTF8-BOM 到 UTF8。 3.OB_START();在header
之前没想到解决方案会是这样!
然而,当我从四个不同的人那里读到同样的东西时,我不得不尝试这个并且它起作用了!我的包含文件中几乎没有前导、尾随和空白 space。我摆脱了它们,我的问题就解决了。
这是对我帮助很大的文章 Troubleshooting "Warning: session_start(): Cannot send session cache limiter - headers already sent"
如果包含文件中的 php 标记(或 html 或任何输出)后有空白 space,则会出现此错误。 -来自 Imdad
出现此问题的原因有 99% 可能是在您的包含文件末尾尾随 spaces(是的 - 我知道这听起来不太可能,但请尝试一下)。删除尾随的 spaces、换行符等...一切都会好起来的。 -克里斯 B
一个白色-space before <?php
也发送输出并出现错误。结论:在调用 session_start() 或 header() 函数之前不要输出任何字符,即使是 white-space 或换行符 -by Biswadeep Sarkar
对于可能 运行 跨越此的其他人 - 如果有人不小心留下了 php 包含文件的尾随 space,也会发生这种情况。示例:
<?php
require_once('mylib.php');
session_start();
?>
在上面的例子中,如果 mylib.php 在结束 ?> 标签后有空白 spaces,这将导致错误。如果您有 included/required 个文件,这显然会很烦人。幸运的是,该错误告诉您哪个文件有问题。 -罗斯