今天写了一段代码,出现错误Cannot modify header information - headers already sent by
代码结构如下:
//一些数据库查询的操作之后,有一个redirect跳转

$class->load->model('shop/muser');
$id=$class->muser->getUserId($user,$pwd); //这里出了点问题
redirect('index');

codeigniter里的redirect()执行一个指定的利用header头文件实现跳转本地网址URL的操作,也就是类似header()的功能。
google之:“所有对header()函数有了解的人都知道,这个函数会发送一段文件头给浏览器,但是如果在使用这个函数之前已经有了任何输出(包括空输出 ,如空格,回车和换行)就会提示出错:”Header had all ready send by”!”
这种错误的原因是发送http头之前有输出。迷惑了,我的代码并没有任何输出呀?仔细检查了一下之前的操作,发现数据库查询是出了点问题,原因就在这,因为出问题后,会输出一些错误提示。在网上找的解决办法是在程序前面使用ob_start()函数,ob_start打开了缓冲区,要输出的内容就不会出现到浏览器,而是保留在服务器,直到你使用flush或者ob_end_flush才会输出,所以并不会有任何文件头输出的错误!
ob_start确实管用,但是要知道它同时欺骗了我,我认为我的程序很完美,根本意识不到自己犯下的错误,因为没有错误提示。


from:http://www.tonsh.net/blog/?p=24#more-24