无法发送会话缓存限制器 - 标头已发送 - CodeIgniter (Session.php)

Posted

技术标签:

【中文标题】无法发送会话缓存限制器 - 标头已发送 - CodeIgniter (Session.php)【英文标题】:Cannot send session cache limiter - headers already sent - CodeIgniter (Session.php) 【发布时间】:2017-10-19 12:30:26 【问题描述】:

我知道这已经讨论过很多次了,但我认为这是不同的情况。

我正在对 php 方法进行简单的 ajax 调用,如下所示:

public function updateAbout()

    log_message('debug', "updateAbout is called", false);   

     log_message('debug',$this->input->post('fname'), false);

   log_message('debug', "updateAbout success", false);   


在这种方法中,我只是试图获取通过 ajax 调用传递的数据。

但我没有得到 ajax 调用发布的数据,而是得到 2 个错误:

Severity: Warning --> session_start(): Cannot send session cache limiter - headers already sent ...\..\\libraries\Session\Session.php 143
Severity: Warning --> Cannot modify header information - headers already sent ..\..\libraries\Session\Session.php 171

注意:

我没有在我的项目中的任何地方使用session_start()

此错误指向 CodeIgniter 库的 Session.php 文件中的 session_start() 方法。它没有指向我的代码中的任何地方,所以我不确定在哪里寻找问题。

我已经在整个互联网上检查了答案,但似乎都没有解决这个问题。

为什么会出现此错误,我该如何预防?

编辑:

根据其他答案中的建议,我已在所有代码中检查并删除了 <?php ?> 中的空格。

这是我进行 ajx 调用的 JavaScript 代码。

      $("#btnupdateAbout").click(function()

      $fname=$("#updatefname").val();
      $lname=$("#updatelname").val();
      $country=$("#updatecountry").val();
      $locality=$("#updatelocality").val();

      if($('#optradioMale').is(':checked'))  $gender="Male"; 
      else$gender="Female";

       $.ajax(

           url:"http://localhost/Voyager/ProfileControls/updateAbout",
           data:'fname':$fname,'lname':$lname,'country':$country,'locality':$locality,'gender':$gender,
           method:"POST",
           contentType:false,
           cache:false,
           processData:false,

           success:function()

           

       );
   );

【问题讨论】:

如果文件中有关闭 PHP 标记,请先删除这些标记。 @Tpojka 你的意思是在视图或控制器中??在控制器中,我没有关闭 php 标记。看来,我必须要不然它会报错。 对。在控制器和其他普通 PHP 文件中。还要检查并确保您的工作文件保存为没有 BOM 的 UTF-8。 如何检查没有 BOM 的 utf-8? 为什么它没有指向我的代码中的确切位置?如何在包含数百个 php 文件的项目中找到它。这一切都运行良好,直到我添加了一个模态和 ajax 调用.. 现在即使在删除这部分代码之后,这个错误也会出现。 :( 【参考方案1】:

请您检查一下这个答案How to fix "Headers already sent" error in PHP

可能在设置标头之前出现了一些输出/或错误。

【讨论】:

我不明白。我的意思是我没有打印任何东西的 echo 语句,没有 session_start 代码,没有空格。我在哪里寻找。错误消息指向 codeigniter 的会话库。 :(【参考方案2】:

当您进行 AJAX 调用时,您正在调用 Code-igniter 入口点,该入口点将加载所有必需的库,包括启动会话。

不知道log_message() 函数在做什么,但我相信它会尝试打印到 STDOUT,然后您的代码或 Code Igniter 会尝试发送一些标头。

您能否发布有关您的 log_message() 函数的大部分详细信息???

【讨论】:

Log_message 仅用于调试目的。它只是打印出日志文件中的内容。 ://www.codeigniter.com/user_guide/general/errors.html 如果我能找到我的代码的哪一部分正在发送标头:(【参考方案3】:

在ajax调用期间在浏览器中使用F12并单击控制台和网络以查看您的ajax调用详细信息,有时由于不推荐使用的方法而发生错误,您需要更改php.ini中的一些php设置 喜欢

always_populate_raw_post_data = -1

如果您使用的是routes.php,请确保您使用的是正确的路径

【讨论】:

经过几次调试后,我们发现问题出在 ajax 调用中的 url 与实际 url 不匹配(区分大小写)。非常感谢尼萨姆。

以上是关于无法发送会话缓存限制器 - 标头已发送 - CodeIgniter (Session.php)的主要内容,如果未能解决你的问题,请参考以下文章

无法发送会话缓存限制器-已发送的标头-CodeIgniter(Session.php)

警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送 [重复]

会话开始错误 [重复]

无法发送会话 cookie - 标头已发送 PHPUnit / Laravel

警告:session_start() [function.session-start]:无法发送会话 cookie - 标头已发送 [重复]

错误:在我初始化会话后发送标头后无法设置标头