会话缓存只在两个页面上出错 - 所有其他页面都正常工作

时间:2016-07-07 05:20:32

标签: php session config session-variables

我开发了一个开发人员的网站。我的网站工作正常。突然间我发现每当我点击“联系我们”链接时,我都会收到错误

  

"警告: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,所有字体和图像变得更大,页面的外观变得折腾。有人能告诉我如何忽略这个错误,以便系统根本不显示它吗?

4 个答案:

答案 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