无法发送会话缓存限制器 - 标头已发送 - 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 - 标头已发送 [重复]