Codeigniter error message Cannot modify header information

不问归期 提交于 2020-06-09 02:51:06

问题


I got this error message when i run my php CodeIgniter project:

A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\tree\application\models\mtree.php:17)

Filename: core/Common.php

Line Number: 442

line 17:

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

this is my model function:

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);
        }
    }
}

回答1:


While using codeigniter, its best recommended that you echo only in views.

Echoing anywhere randomly sends some data to browser, after which you can't modify headers (this includes attempt to redirect, set content-type, etc)

You should re-organize your code, such that, echo are done within views only. This will solve your header issues in Codeigniter.

This also includes extra whitespaces at the end after the closing brace "} ?>" in non-view php files.




回答2:


You can't display anything before the header function is called. You should not display anything form model or controller to avoid this kind of error. If you want to display something form the controller or model then you should store the output to the buffer instead of sending it to the browser. You can store the output to the buffer using ob_start() function before header() function is called. Then you can do something like this

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



回答3:


this was your issue - echo $row->members_id . ""; -- as the above answers say, don't echo something in your controllers, push to do it in the views - always




回答4:


I think it will be helpfull Use $config['sess_save_path'] = sys_get_temp_dir(); instead of $config['sess_save_path'] = NULL; in your Application/config/config.php file



来源:https://stackoverflow.com/questions/20096109/codeigniter-error-message-cannot-modify-header-information

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!