我开发了一个开发人员的网站。我的网站工作正常。突然间我发现每当我点击“联系我们”链接时,我都会收到错误
"警告:session_start()无法发送会话缓存限制器 - heards 已发送(输出从/home/xxx/public_html/contact.php:1开始) 在/home/xxx/public_html/connection/config.php第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文件。
&#34;警告:session_start()无法发送会话缓存限制器 - heards 已发送(输出从/home/xxx/public_html/contact.php:1开始) 在/home/xxx/public_html/connection/contact.php第2行&#34;
之前它指的是config.php fle
注册页面也发生了同样的事情。我有三个文件register.php,register1.php和register2.php。只有在加载页面时register3.php才会出现同样的错误,单击提交按钮时再次出现错误。
我请求是否有人可以帮我确定问题。
感谢。
修改
正如Premalatha所建议的那样:
从contact.php中删除session_start();
- &gt;但同样的警告。
在session_start();
- &gt;之上放置include("connection/config.php");
但同样的警告。
根据Alok的建议:
我不知道如何在session_start()
之前检查我是否正在发送内容或调用标题。 session_start()
行位于顶部或第二行,第一行为include("connection/config.php");
我尝试颠倒互换而没有任何帮助。
我不明白其他.php文件也有相同的编码,为什么这个警告只出现在contact.php上?同样,register1.php,register2.php也有相同的编码,但为什么警告仅在加载和卸载register3.php时出现。一切都在以前工作,这突然开始,我不记得在任何这些文件中做任何更改,所以问题可能是其他的。我也想尝试一下wangpeng的建议,但我在cpanel的任何地方都找不到php.ini文件。此外,我没有弄清楚如何检查文件的代码是否是UTF8-BOM。另外我应该把OB_START()
放在哪里,因为我无法确定标题的位置。
EDIT2
顺便说一下,此警告不会影响网站的运行。错误刚出现然后消失。然而,它扰乱了CSS,所有字体和图像变得更大,页面的外观变得折腾。有人能告诉我如何忽略这个错误,以便系统根本不显示它吗?
答案 0 :(得分:0)
已发送的标头表示PHP脚本已将标头发送到服务器,现在无法修改。
这意味着在session_start()
之前您的脚本必须向服务器发送内容或调用header
,并在发送脚本后调用 session_start()函数尝试修改标题。
在您的情况下,解决方法是检查您是否未在两个脚本中header
之前的某个位置发送内容或致电session_start()
。
<强>更新强>
试试这个,
找到 contact.php 中指向的所有 * .php 文件,并在其中找到session_start();
。
将其替换为以下内容,
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
如果代码已经启动,则上面的代码将确保您不会再次启动会话。
答案 1 :(得分:0)
在session_start(); 已包含在config.php文件中。 您可以在contact.php文件中删除它,它可以毫无问题地开始工作。
如果您仍然遇到任何问题,可以放置session_start(); contact语句中的contact.php代码行。
答案 2 :(得分:0)
1.php.ini session.auto_start = 0到session.auto_start = 1。 2.检查文件的代码是UTF8-BOM吗?是的,UTF8-BOM到UTF8。 3.OB_START();在标题
之前答案 3 :(得分:0)
我从未想过解决方案会是这个!
然而,当我从四个不同的人那里读到相同的东西时,我不得不尝试这个并且它有效!我的包含文件中的前导,尾随和空格很少。我摆脱了他们,我的问题解决了。
这篇文章给了我很多帮助 Troubleshooting "Warning: session_start(): Cannot send session cache limiter - headers already sent"
如果在包含文件中的php标记(或html或任何输出)后面有空格,则会出现此错误。 -by Imdad
获得此问题的原因是,在包含文件末尾有99%可能是尾随空格(是的 - 我知道这听起来不太可能,但只是尝试一下)。删除尾随空格,换行符等......一切都会好的。 -by Chris B
<?php
之前的空格也会发送输出并出现错误。结论:在调用session_start()或header()函数之前不要输出任何字符,即使是空白行也不是换行符 -by Biswadeep Sarkar
对于可能遇到此问题的其他人 - 如果有人不小心从php包含文件中留下尾随空格,也会发生这种情况。例如:
<?php
require_once('mylib.php');
session_start();
?>
在上面的例子中,如果mylib.php在关闭后有空格?>标记,这将导致错误。如果您已经包含/需要许多文件,这显然会让人讨厌。幸运的是,错误告诉您哪个文件有问题。 -by Ross