Codeigniter错误消息无法修改标头信息


Codeigniter error message Cannot modify header information

我在运行php CodeIgniter项目时收到了此错误消息:

遇到PHP错误

严重性:警告

消息:无法修改标头信息-标头已由发送(输出开始于C: ''AppServ''www''tree''application''models''mtree.php:17)

文件名:core/Common.php

行号:442

第17行:

echo $row->members_id . "</br>";

这是我的模型函数:

function convert_all() {
    $this->db->empty_table('table1');
    $this->db->empty_table('table2');
    $this->db->query("INSERT INTO `table1` (`members_id`, `members_username`);
    $query = $this->db->get('table2');
    foreach ($query->result() as $row) {
        if ($row->members_id > 1) {
            echo $row->members_id . "</br>";
        }
        if ($this->isadvanced($row->members_id, $row->members_direct_id)) {
            $this->insert_to_right($row, $row->members_direct_id);
        } else {
            $this->insert_to_left($row, $row->members_direct_id);
        }
    }
}

使用codeigniter时,最好只在视图中使用echo

任何地方的回声都会随机向浏览器发送一些数据,之后您就不能修改标题(包括尝试重定向、设置内容类型等)

您应该重新组织您的代码,以便echo仅在视图中完成。这将解决Codeigniter中的标头问题。

这还包括在非视图php文件中的右大括号"} ?>"后面的末尾的额外空格。

我认为这会很有帮助在Application/config/config.php文件中使用$config['sess_save_path'] = sys_get_temp_dir();而不是$config['sess_save_path'] = NULL;

在调用头函数之前,不能显示任何内容。您不应该显示任何形式的模型或控制器,以避免这种错误。如果你想从控制器或模型中显示一些东西,那么你应该将输出存储到缓冲区,而不是发送到浏览器。在调用header()函数之前,可以使用ob_start()函数将输出存储到缓冲区。然后你可以做一些类似的事情

if(true)
{
    header("Location:http://google.com");
}
else
{
   ob_end_flush();
}

这是您的问题-echo$row->members_id。";--正如上面的答案所说,不要在控制器中回声,在视图中推动它-始终