我在运行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。";--正如上面的答案所说,不要在控制器中回声,在视图中推动它-始终