今天寫了一段代碼,出現錯誤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